SQL 服务器将日期时间存储为整数
SQL Server Storing DateTime as Integer
我正在向数据仓库添加一些表,并希望将日期时间信息存储到一个 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);
在存储方面 space,确实没有任何优势。 int
使用四个字节,datetime
使用八个字节。如果你真的需要保留 space,你应该使用 date
类型,它只使用三个字节。
缺点:当您将其转换为 int 时,您丢失了日期时间的时间部分,最终只存储了日期部分。您节省了 4 个字节(datetime 为 8 个字节,int 为 4 个字节),但您失去了精度。通过转换为日期,您失去了同样多的精度,但您节省了 5 个字节(日期为 3 个字节)。因此,如果目标是节省存储空间 space,我会建议转换到最新。
如果 objective 易于操作,请使用 DateAdd
和 DateDiff
函数,它们适用于日期和日期时间。不像 +1
或 -7
那样简单,但也没有复杂多少,并且基本上是无需大量编码即可添加月份或年份的唯一方法。
优点:如果您使用 Excel,则不需要在 Excel 和数据库之间进行转换,这是 Excel 的默认设置日期格式,Excel 可读,所有 Excel 的日期函数都在其上工作
我正在向数据仓库添加一些表,并希望将日期时间信息存储到一个 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);
在存储方面 space,确实没有任何优势。 int
使用四个字节,datetime
使用八个字节。如果你真的需要保留 space,你应该使用 date
类型,它只使用三个字节。
缺点:当您将其转换为 int 时,您丢失了日期时间的时间部分,最终只存储了日期部分。您节省了 4 个字节(datetime 为 8 个字节,int 为 4 个字节),但您失去了精度。通过转换为日期,您失去了同样多的精度,但您节省了 5 个字节(日期为 3 个字节)。因此,如果目标是节省存储空间 space,我会建议转换到最新。
如果 objective 易于操作,请使用 DateAdd
和 DateDiff
函数,它们适用于日期和日期时间。不像 +1
或 -7
那样简单,但也没有复杂多少,并且基本上是无需大量编码即可添加月份或年份的唯一方法。
优点:如果您使用 Excel,则不需要在 Excel 和数据库之间进行转换,这是 Excel 的默认设置日期格式,Excel 可读,所有 Excel 的日期函数都在其上工作