使用SUBSTRING处理SQL Server中[First released]列的格式统一问题
处理SQL Server中日期与区域标识混合字段的标准化问题
1. 识别异常数据
通过TRY_CONVERT函数判断字段前缀能否转换为有效日期,以此区分正常/异常数据:
SELECT ID, [First released], CASE WHEN TRY_CONVERT(DATE, LEFT([First released], 10)) IS NOT NULL THEN '正常' ELSE '异常' END AS 数据状态 FROM @tbl;
2. 统计需修改的异常数据数量
直接过滤出无法转换为有效日期的行,统计总数:
SELECT COUNT(*) AS 异常数据总数 FROM @tbl WHERE TRY_CONVERT(DATE, LEFT([First released], 10)) IS NULL;
3. 更新数据为标准日期格式
针对两种异常场景分别处理:
- 带完整日期+区域标识的(如
2006-02-28NA):截取前10位有效日期; - 仅年份+区域标识的(如
2004PAL):提取年份后补默认的-01-01(业务规则可按需调整)。
UPDATE @tbl SET [First released] = CASE WHEN TRY_CONVERT(DATE, LEFT([First released], 10)) IS NOT NULL THEN LEFT([First released], 10) ELSE CONCAT( SUBSTRING([First released], 1, PATINDEX('%[^0-9]%', [First released]) - 1), '-01-01' ) END WHERE TRY_CONVERT(DATE, LEFT([First released], 10)) IS NULL;
4. 验证更新结果
执行更新后,查询确认所有行已转为YYYY-MM-DD格式:
SELECT ID, [First released] FROM @tbl;
预期输出:
| ID | First released |
|---|---|
| 1 | 2006-02-28 |
| 2 | 2004-01-01 |
内容的提问来源于stack exchange,提问作者Tails0298
相关产品推荐
相关产品推荐

