SQL Server将DateTime存储为整数

时间:2015-06-18 19:54:17

标签: sql datetime data-warehouse

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

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

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

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

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

只是想知道你对此有什么利弊?

2 个答案:

答案 0 :(得分:3)

XmlSerializer innerSer = new XmlSerializer(typeof(InnerType)); XmlReader subTree = reader.ReadSubtree(); InnerType obj = (InnerType)innerSer.Deserialize(subTree); int之间进行转换就可以了。它很好地定义了转换的作用,因此没有任何神秘的事情会突然改变或停止工作。

让我们看一些方面:

  • 可比较:是的;你仍然可以比较数字来判断哪个日期更早。
  • 可排序:是的;您只需按datetime排序,按日期排序。
  • 可读:不;你必须把它转换成int才能理解它。
  • 不言自明:不;你必须知道这个号码代表什么用来做任何事情。
  • 便携式:是的;您可以在任何支持日期算术的系统中进行相同的转换。

您可以在C#中执行从datetimeint的相同转换:

DateTime

在存储空间方面,没有任何优势。 DateTime d = new DateTime(1900, 1, 1).AddDays(42172); 使用四个字节,int使用八个字节。如果你真的需要保留空间,你应该使用datetime类型,它只使用三个字节。

答案 1 :(得分:0)

缺点:将其强制转换为int时,您将松散datetime的时间部分,最后仅存储了日期部分。您保存4个字节(日期时间为8个字节,整数为4个字节),但是却失去了精度。通过强制转换日期,可以降低精度,但是可以节省5个字节(日期为3个字节)。因此,如果目标是节省存储空间,我建议您强制转换为最新版本。

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

专业人士:如果您使用Excel,则无需在Excel和数据库之间进行转换,这是Excel可以读取的Excel的默认日期格式,并且所有Excel的日期功能都可以使用