我正在向数据仓库添加一些表,并希望将日期时间信息存储到int字段中(时间部分对我来说并不重要)
请注意,我不存储为20150123,我只是使用
CAST(field as int)
将 2015-06-18 12:57:47.833 存储为 42172
我可以轻松地将一天添加 +1,并通过在字段中添加 7 来添加一周。 但是,增加一个月并不简单。此外,每当我需要数据的日期表示形式时,我都可以将其转换为日期时间。
只是想知道您看到的利弊是什么?
在 int
和 datetime
之间进行转换工作得很好。转换的功能定义很好,因此没有什么神秘的事情可能会突然改变或停止工作。
让我们看一些方面:
- 可比:是的;您仍然可以比较数字来判断哪个日期更早。
- 可排序:是的;您可以简单地按
int
排序,并按日期排序。 - 可读性:不;你必须把它转换成
datetime
才能理解它。
不 - 言自明:不;你必须知道这个数字代表什么才能用它做任何事情。
- 便携:是的;您可以在任何支持日期算术的系统中执行相同的转换。
例如,您可以在 C# 中执行从 int
到 DateTime
的相同转换:
DateTime d = new DateTime(1900, 1, 1).AddDays(42172);
在存储空间方面,实际上没有任何优势。一个int
使用四个字节,一个datetime
使用八个字节。如果确实需要保留空间,则应使用 date
类型,该类型仅使用三个字节。
:当您将其转换为int时,您会丢失日期时间的时间部分,最终只存储日期部分。您节省了 4 个字节(8 个字节用于日期时间,4 个字节用于 int),但会丢失精度。通过强制转换为日期,您可以失去同样多的精度,但您可以节省 5 个字节(日期为 3 个字节)。因此,如果目标是节省存储空间,我建议您投射到今天。
如果目标是易于操作,请使用DateAdd
和DateDiff
函数,它们适用于日期和日期时间。不像+1
或-7
那么简单,但也没有复杂得多,基本上是无需大量编码即可添加数月或数年的唯一方法。
优点:如果您使用 Excel,则不需要在 Excel 和数据库之间进行转换,这是 Excel 的默认日期格式,Excel 可读,所有 Excel 的日期函数都在使用它