2014-01-21 23 views

回答

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)与日期数据类型相比,数据占用空间更大。

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

我希望我的回答能帮助你。

+0

谢谢你的解释。奇怪的人使用自己的类型而不是明确定义的类型。 –

+0

“我会建议在SQL Server中使用DATETIME数据类型。” - 不。如果你想要一个日期使用日期数据类型。 “ –

+0

”是的,我也建议在SQL服务器中使用DATETIME datetype。“ “ –

1

整数编码日期(例如20140121)在仓库数据库中很常见。

这是否是一个好主意取决于您使用的RBDMS。在某些情况下,它们使用的空间少于等效的日期时间数据类型,并且它们在原始数据表单中可读。

例如,2008年之前的版本,但在SQL Server用于是SQL Server推荐的方法2008+有这需要更少的空间,并且还容易读取作为日期一个3字节纯日期类型。

+0

但不应该是日期类型自然的所有类型的比较? –

1

我不能想象使用一个普通的整数除了相当可疑的能力接受无效的日期,如-19000233的任何优势。

优点是在大多数DBMS中可以使用各种各样的精确的日期函数。例如在DB2中,您可以说

WHERE PAYMENT_DATE + 30 DAYS > ORDER_DATE 

找出哪些客户不愿及时交出资金。

+0

这就是我的想法.. –

相关问题