Money数据类型在SQL Server中存储日期值?

时间:2012-02-09 11:38:06

标签: sql sql-server tsql

我正在研究我刚刚继承的数据库的一些性能问题。我可以看到,由于查询将货币数据类型转换为日期,因此存在大量隐式转换。看起来几乎所有的日期字段都有货币数据类型。

有人可以告诉我一个好的和有效的理由,为什么有人会将钱数据类型用于约会?

谢谢!

2 个答案:

答案 0 :(得分:6)

这种做法绝对没有充分和有效的理由。

datetimemoney都是8个字节。 datetimedate保留了4个字节,time保留了4个字节。

money的范围从-922,337,203,685,477.5808922,337,203,685,477.5807。从money转换为datetime时,整数部分被视为自1900-01-01以来的天数,小数部分被视为当天的百分比。

这意味着您在time部分(每0.0001增量= 8.640秒)失去精确度,并且能够在date部分获得无用的额外比例将cast成功的datetime成功存储到9999 AD(其最大界限为{{1}})

如果可能,修复架构。

答案 1 :(得分:0)

我认为只是为了节省空间并且具有细微的粒度,但设计明显怪异

可能是为了避免这个DATETIME和SMALLDATETIME边界,但是如果你说它通常是迄今为止的 - 那么就不太可能了。

<强>更新

由于@Martin Smith说 - 它不节省空间 - 所以设计更加奇怪。

还有一个建议 - 数据是从旧的旧数据库系统导入的,其中datetime值以这种方式存储。

Obvoiusly - 如果您寻找良好且有效的理由 - none