SQL Server 将日期时间存储为整数



我正在向数据仓库添加一些表,并希望将日期时间信息存储到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);

在存储空间方面,实际上没有任何优势。一个int使用四个字节,一个datetime使用八个字节。如果确实需要保留空间,则应使用 date 类型,该类型仅使用三个字节。

缺点

:当您将其转换为int时,您会丢失日期时间的时间部分,最终只存储日期部分。您节省了 4 个字节(8 个字节用于日期时间,4 个字节用于 int),但会丢失精度。通过强制转换为日期,您可以失去同样多的精度,但您可以节省 5 个字节(日期为 3 个字节)。因此,如果目标是节省存储空间,我建议您投射到今天。

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

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

相关内容

  • 没有找到相关文章

最新更新