如何在SQL Server中移除日期字段里的第三个短横线(-)
解决SQL Server中特定短横线移除的问题
针对你遇到的日期字符串格式问题(27-01-2023 - 15:18:52),这里提供两种实用方法仅移除日期和时间之间的多余短横线:
方法一:精准替换特定子串(最简便)
你的字符串里,多余的短横线是和前后空格一起出现的(-),而日期部分的短横线没有前后空格,直接用REPLACE替换这个特定子串为单个空格即可:
-- 处理字符串后转换为日期类型 SELECT CAST(REPLACE(your_date_column, ' - ', ' ') AS DATETIME) AS converted_datetime FROM your_table;
处理后字符串会变成27-01-2023 15:18:52,SQL Server可以正常识别这个格式。如果担心存在无效数据导致报错,建议用TRY_CAST替代CAST,无效数据会返回NULL而非抛出错误:
SELECT TRY_CAST(REPLACE(your_date_column, ' - ', ' ') AS DATETIME) AS converted_datetime FROM your_table;
方法二:定位第三个短横线并移除(适用于格式有轻微变化的场景)
如果字符串格式偶尔有空格差异,但第三个短横线始终是需要移除的目标,可以用CHARINDEX多次调用定位第三个短横线的位置,再用STUFF函数移除它:
SELECT STUFF( your_date_column, -- 定位第三个短横线的位置 CHARINDEX('-', your_date_column, CHARINDEX('-', your_date_column, CHARINDEX('-', your_date_column)+1)+1), 1, -- 移除1个字符(即目标短横线) '' ) AS cleaned_date_string, -- 转换为日期类型 CAST(STUFF(your_date_column, CHARINDEX('-', your_date_column, CHARINDEX('-', your_date_column, CHARINDEX('-', your_date_column)+1)+1), 1, '') AS DATETIME) AS converted_datetime FROM your_table;
这个方法会直接去掉第三个短横线,处理后的字符串是27-01-2023 15:18:52(日期和时间之间为两个空格),不过SQL Server识别日期时会忽略多余空格,不影响转换结果。
内容的提问来源于stack exchange,提问作者tomdemaine
相关产品推荐
相关产品推荐

