Ada*_*Dev 3 sql t-sql sql-server vb6
我正在查看一些遗留的VB6代码(年代+岁,在我的时间之前),它运行针对SQL 2005 db的查询.它在WHERE子句中提供日期限制- 其中日期作为整数值给出,作为CLng()VB6中日期的结果.
例如
...
WHERE SomeDateField >= 40064
Run Code Online (Sandbox Code Playgroud)
40064就是VB6将今天的日期转换为(9月8日)的方法CLng().但是,在T-SQL中,这个整数实际上转换为9月10日:
SELECT CAST(40064 AS DATETIME)
Run Code Online (Sandbox Code Playgroud)
结果不如预期.
任何人都知道什么可能导致VB和T-SQL之间的转换差异?
我确信这总是没有问题,显然我的建议是以标准ISO格式将日期作为日期传递.但是,需要尝试找到这种差异背后的原因.
似乎VB日期时间从1899年12月30日开始:
?CDbl(#30/12/1899 03:00:01#)
0.125011574074074
Run Code Online (Sandbox Code Playgroud)
而SQL datetime从1900年6月1日开始:
SELECT CAST(0 AS DATETIME)
1900-01-01 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
这给你两天的差异,这符合你的结果:).
'VB6
CDbl(#2009-09-08#)
40064
-- SQL:
SELECT CAST(40064 AS DATETIME)
2009-09-10 00:00:00.000
Run Code Online (Sandbox Code Playgroud)