You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将SQL表中Decimal格式存储的Excel日期转换回日期格式

解决Excel日期序列号转SQL datetime的问题

错误原因

你之前用的convert(datetime, '45014.75', 103)写法不对——103样式是用来解析dd/mm/yyyy格式的日期字符串的,而45014.75是Excel的日期序列号(本质是浮点数,代表从1900-01-00开始的天数+时间占比),不是日期字符串,所以转换会报错。

正确转换方法

情况1:SQL表中存储的是数值类型(float/decimal)

直接用DATEADD函数计算,把序列号作为天数加到Excel的起始日期1900-01-00上:

SELECT
    DATEADD(day, 45014.75, '1900-01-00') AS ConvertedDate1,  -- 输出:2023-03-29 18:00:00.000
    DATEADD(day, 45216.3958333333, '1900-01-00') AS ConvertedDate2  -- 输出:2023-10-17 09:30:00.000

情况2:SQL表中存储的是字符串类型

先把字符串转成浮点数,再用DATEADD:

SELECT
    DATEADD(day, CAST('45014.75' AS float), '1900-01-00') AS ConvertedDate1,
    DATEADD(day, CAST('45216.3958333333' AS float), '1900-01-00') AS ConvertedDate2

补充说明

  • Excel日期序列号的整数部分是从1900-01-00开始的天数,小数部分是一天内的时间占比(比如0.75=18:00,0.3958333333≈09:30)
  • 若遇到小于60的序列号,要注意Excel的1900闰年bug(Excel错误认为1900年是闰年),需额外减1天,但你的数值远大于60,无需处理。

内容的提问来源于stack exchange,提问作者Philip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 07:18:25