我正在研究我刚刚继承的数据库的一些性能问题。我可以看到,由于查询将货币数据类型转换为日期,因此存在大量隐式转换。看起来几乎所有的日期字段都有货币数据类型。
有人可以告诉我一个好的和有效的理由,为什么有人会将钱数据类型用于约会?
谢谢!
答案 0 :(得分:6)
这种做法绝对没有充分和有效的理由。
datetime
和money
都是8个字节。 datetime
为date
保留了4个字节,time
保留了4个字节。
money
的范围从-922,337,203,685,477.5808
到922,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 。