And*_*lva 11 sql sql-server excel datetime
今天我发现了一些非常奇怪的事情,同时将一个日期时间转换为excel中的文本,并使用它生成的数字转换为SQL Server中的datetime.
这有什么奇怪的?结果不同.准确地说两天的差异.
我在Excel中假设今天(20/05/2014 dd/MM/yyyy)的日期,并在文本中得到41779.


我得到了文本值,我使用SQL转换来datetime检索值作为日期,我没有得到我想要的结果.

我甚至测试过datetime2但是我知道我无法转换int为datetime2

我不是MS Excel专家,也不是SQL Server专家,但是发生了什么?我可以通过执行MS Excel生成的数字并删除2来使其工作,但对我来说仍然没有意义.
Gar*_*thD 11
专门针对允许来自int的强制转换的DATETIME,有两个原因造成差异.
Excel对日期使用1的基数,SQL Server使用0,即01/01/1900当转换为excel中的数字为1时,然而,在SQL中它为0:SELECT CAST(CAST('19000101' AS DATETIME) AS INT);将给出0.
excel中有一个故意错误,允许来自Lotus的可移植性,其中bug不是故意的*.Excel认为1900年2月29日是有效日期,但1900年不是闰年.SQL没有这个问题,所以这意味着excel日历中还有一天.
*(进一步阅读这表明它可能是故意的,或被认为是无关紧要的)
附录
有一个微软支持项目:
当Lotus 1-2-3首次发布时,该计划假设1900年是闰年,尽管它实际上不是闰年.这使得程序更容易处理闰年,并且对Lotus 1-2-3中的几乎所有日期计算都没有造成任何损害.
当Microsoft Multiplan和Microsoft Excel发布时,他们还认为1900年是闰年.此假设允许Microsoft Multiplan和Microsoft Excel使用Lotus 1-2-3使用的相同序列日期系统,并提供与Lotus 1-2-3的更高兼容性.将1900作为闰年处理也使用户更容易将工作表从一个程序移动到另一个程序.
小智 9
嘿嘿;)一天前我想知道同样的事情......做一个简单的练习:
比较Select Cast(0 as DateTime)与=DATEVALUE("1900-01-01") 解释1天的差异
通过阅读VBA之父Joel Spolsky解释,找到了一个额外的闰年
TL;博士
看看差异 - 这是第二天的结果
=DateValue("1900-02-28") 和 =DateValue("1900-03-01")
| 归档时间: |
|
| 查看次数: |
7387 次 |
| 最近记录: |