SQL中如何批量将整列字符串日期序列号转换为标准日期格式
Excel日期序列号批量转标准日期格式方案
你单值测试的dateadd转换逻辑完全正确,以1899-12-30为基准计算Excel序列值偏移的方式适配所有同格式序列号,批量处理不需要逐行写逻辑,直接按列引用即可覆盖全表700条记录,分两种使用场景操作:
仅查询时转换,不修改原表数据
直接把单值语句里的固定序列号替换为列名即可,SQL会逐行读取列值计算。因为原列是字符串类型,加显式整数转换避免隐式转换报错:
-- 输出日期类型结果 SELECT DATEADD(d, CAST(date AS INT), '1899-12-30') AS date FROM 你的表名;
如果需要直接输出YYYY-MM-DD格式的字符串结果(和你给出的目标示例格式完全一致),套一层格式转换即可:
-- 输出'YYYY-MM-DD'格式字符串 SELECT CONVERT(VARCHAR(10), DATEADD(d, CAST(date AS INT), '1899-12-30'), 23) AS date FROM 你的表名;
永久修改原表,替换原字符串列为标准日期列
如果后续需要基于日期做筛选、聚合计算,建议直接修改表结构,一劳永逸,按以下步骤执行:
- 新增日期类型的临时列存储转换结果
ALTER TABLE 你的表名 ADD date_temp DATE;
- 批量更新全表数据,把转换后的日期写入临时列
UPDATE 你的表名 SET date_temp = DATEADD(d, CAST(date AS INT), '1899-12-30');
- 抽查数据确认转换结果无误(重点核对序列号44000、44705两个边界值,对应日期应为2020-06-18、2022-05-22),确认无误后删除原字符串列,将临时列重命名为原列名:
ALTER TABLE 你的表名 DROP COLUMN date; EXEC sp_rename '你的表名.date_temp', 'date', 'COLUMN';
注意:执行表结构修改操作前建议备份原表数据,避免误操作导致数据丢失。
内容的提问来源于stack exchange,提问作者clayton55
相关产品推荐
相关产品推荐

