数据库中的日期应该是日期类型还是int(11)?

时间:2014-01-21 06:40:12

标签: sql

当我们创建一个列为日期的数据库时,它可以具有类型日期。但是在创业公司,我实习他们使用int(11)作为类型存储日期为yyyymmdd例如(20140121)。那么使用它有什么好处,还是只是一个选择问题..

3 个答案:

答案 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数据类型相比,数据占用空间更大。

所以我希望您知道您将能够知道应该使用哪种数据类型来存储日期。 你可以通过上面的例子轻松定义。

我希望我的回答会对你有帮助。