首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅知道年份的日期(例如1570-00-00)

仅知道年份的日期(例如1570-00-00)
EN

Stack Overflow用户
提问于 2014-01-18 08:56:26
回答 2查看 177关注 0票数 3

我有一个数据库表,其中有一个名为Born (type = date)的字段,它显示了人们的出生日期(例如1970-07-08)。但是,我该如何处理那些生日不确切的人呢?

例如,一位历史人物出生于1570年。所以我把这个放到我的数据库里: 1570-00-00。但它显示的是1569年11月30日。

这是我使用的代码,其中$Born是存储在数据库中的日期...

代码语言:javascript
复制
$Born = $row['Born'];

$Birth = DateTime::createFromFormat('Y-m-d', $Born);

我的问题应该回答为@ Storing a date where only the year may be known,但我很困惑。听起来有几个选择,我不确定哪一个对我来说是最好的选择。

将月份和日期与年份分开似乎很简单。因此,我有一个名为Year (type = year)的字段和另一个名为Date的月份和日期字段。但我是否可以将后者设置为" date“字段并插入像01-01 (表示1月1日)这样的值,或者我必须插入完整的日期(例如1570-01-01),然后在year字段中单独插入年份?

换句话说,这里有两种方法可以在数据库表中存储1970年4月5日的日期:

年份|日期1970 | 1970-04-05 1970 |1970- 04-05

如果我要将日期放在两个单独的字段中,那么第一种方法可能是最简单的。或者有没有更好的方法呢?

下面是我如何存储只包含一年的日期:

1988 | 1988-00-00

我的查询和显示脚本将只从年份字段中提取1988年,并忽略每个包含双零(00)的值;换句话说,它将忽略第二个字段(日期)。

我还考虑过将保存年份的字段的值从"year“更改为"integer”,因为对于较老的年份,我会收到"out of range value“错误。

由于所有的困惑,我实际上正在考虑创建三个字段-年、月和日-并且只显示“普通英语”值,如下所示:

1970 |1月| 10

这是一个很好的解决方案吗,或者我会遭受一些重大的性能影响?

EN

回答 2

Stack Overflow用户

发布于 2014-01-18 09:12:32

在您不知道确切日期的情况下,我会使用完整的日期"1570-01-01“并添加一个设置为False的布尔值字段IsExactDate。实际上,我会在IsExactDate上添加一个默认值,并将其设置为True。这样,您只需在添加非确切日期时显式设置它。

您可以进一步使用3个额外的字段IsExactYearIsExactMonthIsExactDayDate来模拟有限精度的历史日期。

票数 6
EN

Stack Overflow用户

发布于 2014-01-18 10:13:25

一方面,answer by Mitch Wheat很有趣。

另一方面,你正试图把一个方形的钉子塞进一个圆孔里。DATE in SQL是year+month+day。但对于这些历史数字,你没有一个月或一天,只有一年。即使到那时,这一年也可能只是一个近似值。

在我设计和维护数据库支持的系统的经验中,曾傑瑞操纵或黑客处理数据最终总是适得其反。从长远来看,“讲真话”总会有回报的。

我的意思是,在这种情况下,事实是,对于某些人来说,,你根本没有生日。你有一个大概和部分的生日,只有一年或一年零一个月。部分日期不会生成DATE SQL值。因此,如果没有日期值,就不要使用日期字段/列。

在您的示例中,我将有两个字段/列:

  • known_birthdate_ (DATE)或precise_birthdate_
  • approximate_birthdate_ (VARCHAR)

关于您的年、月和日字段…的想法这可能有意义,也可能没有意义。这取决于您的业务问题。

你的问题没有说明你的目标是什么,你打算如何处理这些数据。您是否正在尝试寻找在特定日期之前或之后出生的人?您是否正在收集历史人物,以便按世纪进行分组?你想计算人们的年龄吗?对于那些出生日期未知或不准确的人,应该如何处理?如果您详细说明了业务逻辑和规则,您的数据结构可能会自行显露出来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21198705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档