代码之家  ›  专栏  ›  技术社区  ›  AdaTheDev

整数到日期时间的转换与vb6不同

  •  3
  • AdaTheDev  · 技术社区  · 15 年前

    我正在查看一些旧的vb6代码(比我的时间早几岁),它对一个SQL2005数据库运行一个查询。它在 WHERE 子句-其中日期作为一个整数值作为 CLng() 在vb6中的日期。

    例如

    ...
    WHERE SomeDateField >= 40064
    

    40064是VB6通过执行 Cng-() 关于它。 但是,在T-SQL中,此整数实际上转换为9月10日:

    SELECT CAST(40064 AS DATETIME)
    

    所以结果并不像预期的那样。

    有人知道在vb和t-sql的转换中什么会导致这种差异吗?

    我敢保证,这总是毫无问题的,显然我的建议是以标准ISO格式将日期作为日期传递。但是,需要努力找出这种差异背后的原因。

    3 回复  |  直到 13 年前
        1
  •  6
  •   Grzegorz Gierlik    15 年前

    似乎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
    
        2
  •  3
  •   Ruffles    15 年前

    Excel和SQL Server之间存在类似的问题,如中所述。 this 线-我想是同一件事吗?

        3
  •  1
  •   Jan Jongboom    15 年前

    我认为这与1900年2月29日是否有关系。我相信vb6认为有,但例如javascript不同意。不过,我不知道SQL Server如何处理这个问题;我认为2月29日也不算。