我正在考虑在包含大量物品/人/动物/建筑物等的数据库中制作项目。
该应用程序将让用户选择两个候选人,看看哪个是第一个。比较将按日期或课程进行。
MySQL仅允许01/01/1000
之后的日期。
如果有一个用户比较哪个首先出现: Michael Jackson 或 Fred Mercury ,那么答案就很容易,因为它们是在今年之后推出的。
但如果他们要先比较哪一个: Tyranosaurus Rex 或 Dog ,他们都是在接受日期之前来的。
如何考虑SQL限制进行这些比较?
我还没有做任何事情,但在我开始做一些永远不会奏效的事情之前,这是我想知道的事情。
这不是关于旧日期的其他问题的重复。
在其他问题中,人们在询问如何存储。这将是非常容易的,只需从中制作一个字符串。但就我而言,我需要比较他们没有要求的日期。
我可以将日期存储为字符串,使用A
表示之前和B
之前,正如人们在其他问题中回答的那样。没问题。但是我怎么能比较这些日期呢?我需要打破哪一部分字符串?
答案 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建议在当前日期之前的任何日期使用负数。