比较基督之前可能做出的事情的创建日期

时间:2015-12-30 18:37:32

标签: mysql sql date

我正在考虑在包含大量物品/人/动物/建筑物等的数据库中制作项目。

该应用程序将让用户选择两个候选人,看看哪个是第一个。比较将按日期或课程进行。

MySQL仅允许01/01/1000之后的日期。

如果有一个用户比较哪个首先出现: Michael Jackson Fred Mercury ,那么答案就很容易,因为它们是在今年之后推出的。

但如果他们要先比较哪一个: Tyranosaurus Rex Dog ,他们都是在接受日期之前来的。

如何考虑SQL限制进行这些比较?

我还没有做任何事情,但在我开始做一些永远不会奏效的事情之前,这是我想知道的事情。

这不是关于旧日期的其他问题的重复。

在其他问题中,人们在询问如何存储。这将是非常容易的,只需从中制作一个字符串。但就我而言,我需要比较他们没有要求的日期。

我可以将日期存储为字符串,使用A表示之前和B之前,正如人们在其他问题中回答的那样。没问题。但是我怎么能比较这些日期呢?我需要打破哪一部分字符串?

3 个答案:

答案 0 :(得分:3)

您可以使用已签名的BIGINT字段并将其用作UNIX时间戳。

UNIX时间戳是自1970年1月1日0:00 UTC以来经过的秒数。

任何时间点都只是一个负时间戳。

如果我的业余计算是正确的,那么BIGINT就足以带你过去292471208678年(从1970年开始)以及相同的未来年数。几乎任何东西都应该足够了。

这会让日期很容易比较 - 你只需看看一个日期是否比另一个更大。

从日历日期到时间戳的转换,你必须在mySQL之外做。

根据您使用的平台,可能会有一个日期库来帮助您完成任务。

答案 1 :(得分:2)

为什么要在进入和抵消时处理静态年龄? 用户无论如何都希望将日期视为日期 复杂的数据输入

三个字段

public static int countChar(String str, char c)
{
    int count = 0;
    for(int i = 0; i < str.length(); i++) if(str.charAt(i) == c) count++;
    return count;
}

if((y1 * 10000 + m1 * 100 + d1)&gt;(y2 * 10000 + m2 * 100 + d2))

答案 2 :(得分:1)

好的,我有个主意。

以年为单位存储年龄,因为小时/秒与此案例无关。

基督的日子年龄:-2015 * 365

狗的年龄:-40000 * 365

为了进行精确的计算,我只需要一个额外的字段,其中包含我添加值的日期。然后从用户进行比较的那天起添加寄存器的那天起添加“以天为单位”的天数差异。

例如:

已在29/12/2015中添加了狗的年龄,且天数为-40000 * 365

用户正在29/01/2016日进行比较。

两个日期之间的天数差异为31天。

所以狗的年龄应为-40000 * 365 - 31.

使用unsigned big int可以解决问题。

感谢Pekka建议在当前日期之前的任何日期使用负数。