首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >整数到日期时间的转换不同于VB6

整数到日期时间的转换不同于VB6
EN

Stack Overflow用户
提问于 2009-09-08 09:49:45
回答 3查看 2K关注 0票数 4

我正在查看一些对SQL2005db运行查询的遗留VB6代码(years+years旧代码,在我之前)。它在WHERE子句中提供了一个日期限制--在这个子句中,由于在VB6中的日期上执行了CLng()操作,所以日期是一个整数值。

例如:

代码语言:javascript
复制
...
WHERE SomeDateField >= 40064

40064是VB6通过对其执行CLng()将今天的日期转换为(9月8日)的日期。但是,在T-SQL中,这个整数实际上会转换为10个9月:

代码语言:javascript
复制
SELECT CAST(40064 AS DATETIME)

因此,结果并不像预期的那样。

有人知道是什么导致VB和T-SQL之间的转换差异吗?

我确信这总是没有问题,显然我的建议是将日期作为标准ISO格式的日期进行传递。但是,需要尝试找到这种差异开始出现的原因。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-08 10:36:00

似乎VB的datetime开始于1899年12月30日:

代码语言:javascript
复制
?CDbl(#30/12/1899 03:00:01#)
 0.125011574074074 

而SQL datetime开始于1900年6月1日:

代码语言:javascript
复制
SELECT CAST(0 AS DATETIME)
1900-01-01 00:00:00.000

这给出了两天的差异,这符合您的结果:)。

代码语言:javascript
复制
'VB6
CDbl(#2009-09-08#)
 40064 

-- SQL:
SELECT CAST(40064 AS DATETIME)
2009-09-10 00:00:00.000
票数 6
EN

Stack Overflow用户

发布于 2009-09-08 10:15:48

this线程中描述的Excel和SQL server之间也有类似的问题--我想这是同一件事?

票数 3
EN

Stack Overflow用户

发布于 2009-09-08 09:54:17

我认为这与1900年2月29日是否存在有关。我相信VB6认为有,但例如JavaScript不同意。然而,我不知道SQL Server是如何处理这个问题的;我相信它也不会计入feb。29.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1393050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档