You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中提取文本内可变长度日期的方法求助

解决SQL中提取可变长度mm/dd/yy日期的问题

首先要明确:SQL的PATINDEX不支持+、?这类正则表达式量词,它只认%(任意长度字符)、_(单个任意字符)、[](字符范围/集合)、[^](排除字符)这几种通配符。你之前写的[0-9]+里的+会被当成普通字符处理,[0-9+]是匹配0-9或者+符号,自然匹配不到日期格式。

给你两种可行的解决方法:

方法一:用PATINDEX匹配所有日期格式组合

因为要覆盖m/d/yy、mm/d/yy、m/dd/yy、mm/dd/yy四种情况,可以把这四种模式整合起来匹配,再根据匹配结果提取对应长度的字符:

SUBSTRING(
    [field1],
    -- 确定日期的起始位置
    COALESCE(
        PATINDEX('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9]%', [field1]),
        PATINDEX('%[0-9][0-9]/[0-9]/[0-9][0-9]%', [field1]),
        PATINDEX('%[0-9]/[0-9][0-9]/[0-9][0-9]%', [field1]),
        PATINDEX('%[0-9]/[0-9]/[0-9][0-9]%', [field1])
    ),
    -- 确定要提取的字符长度
    CASE
        WHEN PATINDEX('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9]%', [field1]) > 0 THEN 8
        WHEN PATINDEX('%[0-9][0-9]/[0-9]/[0-9][0-9]%', [field1]) > 0 OR PATINDEX('%[0-9]/[0-9][0-9]/[0-9][0-9]%', [field1]) > 0 THEN 7
        ELSE 6
    END
)

方法二:用TRY_CONVERT直接转换(更简洁可靠)

SQL Server的CONVERT函数支持格式代码1(对应mm/dd/yy格式),它能自动识别一位或两位的月/日。先把字段内容转换成日期类型,再转回字符串就能得到标准格式:

SELECT TRY_CONVERT(varchar(8), TRY_CONVERT(date, [field1], 1), 1) AS extracted_date
FROM your_table

如果field1里的内容不是有效日期,TRY_CONVERT会返回NULL,方便后续过滤无效数据。

内容的提问来源于stack exchange,提问作者Sam CD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:07:40