SQL Server中如何将Nvarchar类型的五位数字日期批量转为Datetime?
SQL Server批量转换Excel日期序列号为实际日期
你提到的40542、40046这类五位数字是Excel日期序列号,本质是从1900-01-01开始累计的天数(Excel存在1900年闰年的bug,实际需要用1899-12-30作为基准来修正)。以下是批量转换的完整步骤:
1. 先验证转换结果(避免直接更新出错)
执行查询语句确认转换后的日期是否正确:
SELECT YourDateColumn AS 原序列号, DATEADD(day, CAST(YourDateColumn AS INT), '1899-12-30') AS 转换后日期 FROM YourTableName
替换YourDateColumn为你的日期列名,YourTableName为表名。
2. 批量更新表中数据
确认转换结果无误后,执行批量更新语句,将序列号替换为标准日期字符串:
UPDATE YourTableName SET YourDateColumn = CONVERT(NVARCHAR(10), DATEADD(day, CAST(YourDateColumn AS INT), '1899-12-30'), 23)
这里23是SQL Server的日期格式代码,对应yyyy-MM-dd,保证日期格式统一规范。
3. 推荐:修改列数据类型为DATE(可选但更合理)
原列类型是NVARCHAR(255),存储日期会浪费空间且容易出错,建议改为DATE类型:
-- 先确保所有数据已转换为有效日期,再执行修改 ALTER TABLE YourTableName ALTER COLUMN YourDateColumn DATE
注意事项
- 若列中存在非数字值,转换会报错,可先筛选出异常行处理:
SELECT * FROM YourTableName WHERE ISNUMERIC(YourDateColumn) = 0
- 操作前建议备份表数据,避免意外错误。
内容的提问来源于stack exchange,提问作者Isioma Ikechukwu
相关产品推荐
相关产品推荐

