将date作为int有什么好处?

时间:2014-01-06 03:59:42

标签: sql sql-server-2008

我们将日期数据存储为int而不是SQL Server 2008的日期格式。

为什么他们不会将日期存储为日期格式类型? 有什么优势吗?

3 个答案:

答案 0 :(得分:2)

那么,你需要问一下将指南/规则放在一起的人们。例如,我宁愿使用DBMS日期格式,因为除了简单的比较之外,你可以做很多事情,而且通常效率更高。

我似乎记得2008年之前的SQL Server版本实际上没有单独的日期和时间数据类型,所以它可能是早期代码/数据的宿醉,或者是那些冒险的编码器保持自己的最新状态。 datetime类型也有其他限制,例如时区不知情。

答案 1 :(得分:1)

在SQL Server 2008之前,在仓库中使用整数编码日期是常见的(甚至是最佳实践),即20130106

存储效率高(4字节)且人类可读。

现在有一个(3字节)Date数据类型,我会在新开发中使用它。

(在任何一个方案中拆分日期和时间对于减少仓库中各个维度的大小非常重要)

答案 2 :(得分:1)

First Advantage

将日期存储为整数有利于所有日期和时间设置的语言中性。 例如,表单20070212始终被解释为ymd,无论您的日期设置是英语,美国,日语等类型。

考虑将日期与字符串' 02/12/07'。

进行比较
SELECT *
FROM Sales.Orders
WHERE orderdate = '02/12/07';

这将被解释为2007年2月12日,在美国设置。但是,如果 对于英国人来说,这种形式可能意味着2007年12月2日。对于日本人来说,可能就是 指2002年12月7日。

因此,根据为特定SQL Server登录指定的语言设置,datetime列将在过滤时进行差异解释。

第二个优势

在根据日期列过滤记录时,我们有时需要对它们应用函数来检索一些日期部分并进行比较。

SELECT *
FROM Sales.Orders
WHERE YEAR(orderdate) = 2007 AND MONTH(orderdate) = 2;

在列上应用函数会使查询变慢,应尽可能避免。 现在考虑等效查询,如果日期存储为整数

SELECT *
FROM Sales.Orders
WHERE orderdate >= 20070201

请注意,无需在orderdate列上应用任何功能。这使查询更快。