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

将SQL表日期列转换为自1999年起的天数数值(仿Excel格式)

解决SQL日期转Excel风格天数的问题

问题分析

你尝试将DATE类型的列转换为Excel风格的天数(如2024-03-25对应45376),但遇到了几个问题:

  • 直接执行CONVERT(int, CAST('02-02-2024' AS date))报错:SQL Server的DATE类型没有直接转INT的内置规则,而GETDATE()返回的是DATETIME类型,该类型转INT会触发内置的天数计算逻辑。
  • 转字符串再转INT得到20240301:这只是把日期的字符串格式(YYYYMMDD)转为数字,并非计算日期与起始点的天数差。

核心原因

SQL Server中,DATETIME类型转INT时,会返回自1900-01-00以来的天数(1900-01-01对应数字1,以此类推),这和Excel的日期计数逻辑完全一致。而DATE是后续引入的轻量日期类型,没有这个隐式转换规则,所以需要先转成DATETIME再处理。

可行解决方案

方案1:将DATE转为DATETIME后转INT

利用DATETIME转INT的内置逻辑,先把DATE列转为DATETIME类型:

SELECT CONVERT(INT, CAST(cd_commission_statement_date AS DATETIME)) AS days_since_1900
FROM your_table_name;

方案2:用DATEDIFF直接计算(更直观)

如果想明确指定起始日期(比如你提到的1999年,或者默认的1900年),用DATEDIFF函数更清晰,避免依赖隐式转换:

-- 计算自1900-01-01以来的天数(和Excel逻辑一致)
SELECT DATEDIFF(day, '1900-01-01', cd_commission_statement_date) AS days_since_1900
FROM your_table_name;

-- 如果确实需要自1999年以来的天数,修改起始日期即可
SELECT DATEDIFF(day, '1999-01-01', cd_commission_statement_date) AS days_since_1999
FROM your_table_name;

为什么SELECT CONVERT(INT, GETDATE())可行

GETDATE()返回的是DATETIME类型,SQL Server对该类型转INT有专门处理:自动计算从1900-01-00到当前日期的天数,所以会得到类似45376的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:37:23