Mysql 比较在基督之前创造的事物的创造日期
我正在考虑在一个包含大量对象/人/动物/建筑物等的数据库中创建一个项目 该应用程序将允许用户选择两个候选人,并查看哪一个先到。比较将按日期或课程进行 MySQL只允许日期在Mysql 比较在基督之前创造的事物的创造日期,mysql,sql,date,Mysql,Sql,Date,我正在考虑在一个包含大量对象/人/动物/建筑物等的数据库中创建一个项目 该应用程序将允许用户选择两个候选人,并查看哪一个先到。比较将按日期或课程进行 MySQL只允许日期在01/01/1000之后 如果有一个用户比较哪一个先到:迈克尔·杰克逊或弗雷德·墨丘利,答案很简单,因为他们是在今年之后出现的 但是如果他们要比较哪一个先到:霸王龙或狗,他们都在公认的日期之前到了 考虑到SQL限制,我如何进行这些比较 我还没有做任何事情,但在我开始做一些永远行不通的事情之前,我想知道这件事 这不是关于旧日期的
01/01/1000
之后
如果有一个用户比较哪一个先到:迈克尔·杰克逊或弗雷德·墨丘利,答案很简单,因为他们是在今年之后出现的
但是如果他们要比较哪一个先到:霸王龙或狗,他们都在公认的日期之前到了
考虑到SQL限制,我如何进行这些比较
我还没有做任何事情,但在我开始做一些永远行不通的事情之前,我想知道这件事
这不是关于旧日期的其他问题的重复。
在其他问题中,人们询问如何存储。这将是非常容易的,只要做一个字符串出来。但在我的情况下,我需要比较这些日期,他们还没有要求
我可以将日期存储为字符串,使用
a
表示之后,使用B
表示之前,就像人们在其他问题中回答的那样。没有问题。但是我怎么能比较这些日期呢?我需要打断字符串的哪一部分?您可以获取一个有符号的BIGINT字段,并将其用作UNIX时间戳
UNIX时间戳是自1970年1月1日UTC 0:00以来经过的秒数
任何时间点都只是一个负时间戳
如果我的业余计算是正确的,那么一个BIGINT就足以让你在过去(从1970年开始)和未来花费292471208678年的时间。这应该足够做任何事情了
这将使日期很容易比较——你只需看看一个日期是否比另一个日期大
不过,从日历日期到时间戳的转换必须在mySQL之外进行
根据您使用的平台,可能会有一个日期库来帮助您完成任务。您可以获取一个签名的BIGINT字段,并将其用作UNIX时间戳 UNIX时间戳是自1970年1月1日UTC 0:00以来经过的秒数 任何时间点都只是一个负时间戳 如果我的业余计算是正确的,那么一个BIGINT就足以让你在过去(从1970年开始)和未来花费292471208678年的时间。这应该足够做任何事情了 这将使日期很容易比较——你只需看看一个日期是否比另一个日期大 不过,从日历日期到时间戳的转换必须在mySQL之外进行 根据您使用的平台,可能会有一个日期库来帮助您完成任务。好的,我有个主意 以天为单位存储年龄,因为小时/秒与此情况无关 基督的年龄(以天计):
-2015*365
狗的年龄(天):-40000*365
为了进行精确的计算,我只需要一个带有我添加值日期的额外字段。然后将我添加注册表的日期与用户进行比较的日期之间的天数差添加到“以天为单位的年龄”中
例如:
狗的年龄已添加到2015年12月29日的29
中,以天为单位的年龄为-40000*365
用户在2016年1月29日进行比较
两个日期之间的天数差为31天
所以狗的日龄应该是-40000*365-31。
使用无符号大整数
可以做到这一点
感谢Pekka建议在当前日期之前的任何日期使用负数。好的,我有个主意
以天为单位存储年龄,因为小时/秒与此情况无关
基督的年龄(以天计):-2015*365
狗的年龄(天):-40000*365
为了进行精确的计算,我只需要一个带有我添加值日期的额外字段。然后将我添加注册表的日期与用户进行比较的日期之间的天数差添加到“以天为单位的年龄”中
例如:
狗的年龄已添加到2015年12月29日的29
中,以天为单位的年龄为-40000*365
用户在2016年1月29日进行比较
两个日期之间的天数差为31天
所以狗的日龄应该是-40000*365-31。
使用无符号大整数
可以做到这一点
感谢Pekka建议对当前日期之前的任何日期使用负数。为什么要在录入和抵销时处理静态年龄?
用户无论如何都希望将日期视为日期
复杂数据输入 三场
year smallint (good for up to -32,768 BC)
month tinyint
day tinyint
如果((y1*10000+m1*100+d1)>(y2*10000+m2*100+d2))为什么要在输入和偏移时处理静态年龄 用户无论如何都希望将日期视为日期
复杂数据输入 三场
year smallint (good for up to -32,768 BC)
month tinyint
day tinyint
如果((y1*10000+m1*100+d1)>(y2*10000+m2*100+d2))仅仅因为某物是日期,并不意味着它必须存储为日期。一根绳子就可以了。一旦你把它拔出来,你想用什么就用什么。当你谈论数十亿年的时候,尤其如此。你打算用什么日期来描述霸王龙和狗?你可能需要创建自己的“自定义数据类型”。。基本上,你要问的问题是“我如何在公元0年之前存储日期?”Durbnpoisin:考虑到他计划在“日期”上做数学运算,将它们存储为字符串可能仍然是一个“坏主意”。将其分解为不同的值