FLOAT类型变体日期转datetime时差两天,求SQL Server解决方案
在SQL Server中修正Excel日期格式转FLOAT再转回Datetime的日期偏差问题
你的问题根源是Excel和SQL Server的日期系统差异:Excel错误地将1900年视为闰年(实际不是),包含了不存在的1900年2月29日,而SQL Server的datetime类型遵循真实日历,因此直接转换会出现日期偏差。以下是针对性的解决方法:
通用解决方法(针对1900-03-01之后的数据)
如果你的FLOAT日期值对应的是1900年3月1日及之后的日期,直接通过DATEADD减去2天即可修正:
SELECT DATEADD(day, -2, CAST(your_float_column AS DATETIME)) AS corrected_datetime FROM your_table;
完整兼容所有日期的处理(包含1900年3月1日之前的数据)
如果数据中存在1900年3月1日之前的日期,需要分情况处理:
SELECT CASE -- 1900-03-01及之后的日期,减2天 WHEN your_float_column >= 61 THEN DATEADD(day, -2, CAST(your_float_column AS DATETIME)) -- Excel中值60对应不存在的1900-02-29,映射为实际的1900-02-28 WHEN your_float_column = 60 THEN CAST('1900-02-28' AS DATETIME) -- 1900-01-01到1900-02-28的日期,减1天 ELSE DATEADD(day, -1, CAST(your_float_column AS DATETIME)) END AS corrected_datetime FROM your_table;
说明
- Excel的日期从1900-01-01开始计数为1,而SQL Server的
datetime类型将1900-01-01计数为0 - Excel错误加入了1900-02-29(对应数值60),导致1900-03-01及之后的日期比真实日期多计了2天
内容的提问来源于stack exchange,提问作者Sina
相关产品推荐
相关产品推荐

