我正在查看一些遗留的 VB6 代码(比我的时代早很多年),它对 SQL 2005 数据库运行查询。它提供了日期限制WHERE
子句 - 其中日期作为整数值给出CLng()
VB6 中的日期。
e.g.
...
WHERE SomeDateField >= 40064
40064 是 VB6 通过执行以下操作将今天的日期转换为(9 月 8 日)的结果CLng()
在上面。
然而,在 T-SQL 中,这个整数实际上转换为 9 月 10 日:
SELECT CAST(40064 AS DATETIME)
所以结果并不如预期。
有谁知道什么可能导致 VB 和 T-SQL 之间的转换差异?
我确信这总是没有问题的,显然我的建议是将日期作为标准 ISO 格式的日期传递。但是,需要尝试找出这种差异开始发生背后的原因。
VB 日期时间似乎从 1899 年 12 月 30 日开始:
?CDbl(#30/12/1899 03:00:01#)
0.125011574074074
而 SQL 日期时间从 1900 年 6 月 1 日开始:
SELECT CAST(0 AS DATETIME)
1900-01-01 00:00:00.000
这给出了两天的差异,适合您的结果:)。
'VB6
CDbl(#2009-09-08#)
40064
-- SQL:
SELECT CAST(40064 AS DATETIME)
2009-09-10 00:00:00.000
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)