SQL 服务器将日期时间存储为整数

SQL Server Storing DateTime as Integer

我正在向数据仓库添加一些表,并希望将日期时间信息存储到一个 int 字段中(时间部分对我来说并不重要)

请注意,我没有存储为 20150123,我只是使用

将其存储为纯整数
CAST(field as int)

将 2015-06-18 12:57:47.833 存储为 42172

我可以很容易地通过 +1 添加一天,通过向该字段添加 7 来添加一周。然而,增加一个月并不是直截了当的。 此外,每当我需要数据的日期表示时,我都可以将其转换为日期时间。

只想知道您对此有何看法?

intdatetime 之间转换效果很好。它明确定义了转换的作用,因此没有什么神秘的事情可能会突然改变或停止工作。

让我们从几个方面来看:

  • 比较:是;您仍然可以通过比较数字来判断哪个日期更早。
  • 可排序:是;您可以简单地对 int 进行排序,它是按日期排序的。
  • 可读性:否;您必须将其转换为 datetime 才能理解它。
  • 不言自明:否;你必须知道数字代表什么才能用它做任何事情。
  • 便携:是;您可以在任何支持日期算术的系统中进行相同的转换。

例如,您可以在 C# 中执行从 intDateTime 的相同转换:

DateTime d = new DateTime(1900, 1, 1).AddDays(42172);

在存储方面 space,确实没有任何优势。 int 使用四个字节,datetime 使用八个字节。如果你真的需要保留 space,你应该使用 date 类型,它只使用三个字节。

缺点:当您将其转换为 int 时,您丢失了日期时间的时间部分,最终只存储了日期部分。您节省了 4 个字节(datetime 为 8 个字节,int 为 4 个字节),但您失去了精度。通过转换为日期,您失去了同样多的精度,但您节省了 5 个字节(日期为 3 个字节)。因此,如果目标是节省存储空间 space,我会建议转换到最新。

如果 objective 易于操作,请使用 DateAddDateDiff 函数,它们适用于日期和日期时间。不像 +1-7 那样简单,但也没有复杂多少,并且基本上是无需大量编码即可添加月份或年份的唯一方法。

优点:如果您使用 Excel,则不需要在 Excel 和数据库之间进行转换,这是 Excel 的默认设置日期格式,Excel 可读,所有 Excel 的日期函数都在其上工作