如何在SQL Server中提取括号内的两个日期并分列为起止日期
SQL Server从字符串括号内提取并转换日期格式
可以通过嵌套SUBSTRING、CHARINDEX和CONVERT函数,在单个查询中完成括号内日期的提取与格式转换。假设你的表名为YourTable,存储目标字符串的字段为YourStringColumn,以下是实现代码:
SELECT -- 提取并转换起始日期 CONVERT(VARCHAR(10), CONVERT(DATE, SUBSTRING(DateRange, 1, CHARINDEX('-', DateRange) - 1), 106), 103) AS Fromdate, -- 提取并转换结束日期 CONVERT(VARCHAR(10), CONVERT(DATE, LTRIM(SUBSTRING(DateRange, CHARINDEX('-', DateRange) + 1, LEN(DateRange))), 106), 103) AS Todate FROM ( -- 先提取括号内的日期范围子串 SELECT SUBSTRING(YourStringColumn, CHARINDEX('(', YourStringColumn) + 1, CHARINDEX(')', YourStringColumn) - CHARINDEX('(', YourStringColumn) - 1) AS DateRange FROM YourTable ) AS Temp
代码说明:
- 内层子查询:通过
CHARINDEX定位括号的位置,用SUBSTRING提取括号内的完整日期范围(如1 Aug 2020 - 30 Oct 2020)。 - 拆分日期:在外层查询中,用
CHARINDEX找到分隔符-的位置,拆分出起始日期和结束日期的原始字符串。 - 格式转换:
- 先用
CONVERT(DATE, 日期字符串, 106)将dd mon yyyy格式的字符串转为DATE类型(106是SQL Server对应该格式的样式代码)。 - 再用
CONVERT(VARCHAR(10), DATE类型值, 103)将日期转为dd/mm/yyyy格式的字符串(103对应英式日期样式)。
- 先用
如果存在格式不规范的字符串,建议改用TRY_CONVERT替代CONVERT,避免转换失败导致查询报错。
内容的提问来源于stack exchange,提问作者Ravi
相关产品推荐
相关产品推荐

