当我们创建一个列为日期的数据库时,它可以具有类型日期。但是在创业公司,我实习他们使用int(11)作为类型存储日期为yyyymmdd例如(20140121)。那么使用它有什么好处,还是只是一个选择问题..
答案 0 :(得分:1)
整数编码日期(例如20140121)在仓库数据库中很常见。
这是一个好主意取决于您使用的RBDMS。在某些情况下,它们使用的空间比等效的datetime数据类型少,并且它们在原始数据表单中是可读的。
例如,它曾经是2008版之前的SQL Server中的推荐方法。但是在SQL Server 2008+中,有一个3字节的纯日期类型,占用的空间更少,并且作为日期也很容易阅读。
答案 1 :(得分:1)
除了接受无效日期(例如-19000233)的相当可疑的能力之外,我无法想到使用普通整数的任何优点。
优点是,在大多数DBMS中,您可以使用各种准确的日期函数。例如,在DB2中,您可以说
WHERE PAYMENT_DATE + 30 DAYS > ORDER_DATE
了解哪些客户不愿意及时交出资金。
答案 2 :(得分:0)
我建议在SQL Server中使用DATETIME数据类型。不一定是出于性能原因,而是利用特定于RDBMS的功能。例如,你必须重新发明许多逻辑只是为了做基本的日期数学(想想DATEDIFF(),DATEADD(),DATEPART()和许多其他功能。它们显然是根据DATETIME数据类型定制的并且很容易与...合作。
你遇到了第一个问题(和我的答案)面向的确切问题。您将20111201和20120131视为日期,您的大脑告诉您应该是60天的差异。好吧,你是基于三角洲循环...这是:
20120131 - 20111201 = 8930(包含循环将为8931)
换句话说,你的WHILE循环正在执行8931次。发生这种情况是因为它们是整数值而你的循环不会从20111231直接跳到20120101。
你的整数不会考虑年和月的上限。
附加信息: -
潜在的数据类型及其大小/限制:
十进制(8,0):5个字节
日期:3个字节,0001-01-01到9999-12-31
Int:4个字节
数字数据类型的优点:
他们看起来很漂亮?
数字数据类型的缺点:
1)需要自定义代码来处理日期操作
2)需要自定义代码来管理正确的日期(即不允许20120230 [2012年2月30日])
3)与Date数据类型相比,数据占用空间更大。
所以我希望您知道您将能够知道应该使用哪种数据类型来存储日期。 你可以通过上面的例子轻松定义。
我希望我的回答会对你有帮助。