sql-server - SQL与Excel中的整数到日期转换问题
问题描述
我有整数日期值 43251,而在 MS Excel 中转换它显示 31-05-2018。在使用下面的 sql 进行转换时
select convert(datetime,convert(int, 43251))
它显示 02-06-2018。为什么与微软的转换有这种差异?
解决方案
SQL Server 使用不同的日期格式。
我相信正确的转换是:
select dateadd(day, 43251, '1899-12-30')
这令人困惑。Excel 将0
其视为1900-00-00
,这意味着 0 是 1899-12-31,1 是 1900-01-01。这应该表明转换是:
select dateadd(day, 43251, '1899-12-31')
但是,这不会产生正确的日期。为什么不?Excel 的闰年算术不正确。因此,它将第 60 天视为 1900-02-29。但是,1900 不是闰年,所以“60”应该是 1900-03-01。
闰年的规则是:
- 能被4整除的年份
- 能被 100 整除的年份除外
- 除了能被 400 整除的年份
所以,2000 年是闰年,但 1900 年和 2100 年不是。
换句话说,日期仅对 1900-03-01 之后的日期是正确的。
推荐阅读
- terraform - Terraform:使用 for_each 创建多个实例
- javascript - 在 socket.on 事件中异步函数
- thymeleaf - 带有字符串值的 Thymeleaf 链接
- spring - 为什么在使用带有redis的spring cloud api gateway ratelimit时响应标头中的X-RateLimit-Remaining -1?
- blockchain - 就数据互操作性和来源而言,托管私有区块链服务(如 Azure 区块链服务)的真正目的是什么
- sql - 在 Laravel Eloquent 中获取最新的重复数据
- apache-zookeeper - 是否可以在单台机器上运行多个具有不同端口的 Zookeeper 实例?
- flutter - 颤振:堆栈内的警报对话框
- json - 如何根据以数组形式给出的键使用python过滤json字符串?
- java - 在spring boot中显示jsp页面时,它与jsp头文件一起显示