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

如何在T-SQL的LIKE子句中指定零个或多个重复字符组?

解决LIKE模式匹配中重复字符组的问题

首先明确:标准SQL的LIKE语法不支持正则式的量词(+/*/{n}),它的通配符只有两个:

  • %:匹配任意长度(含0)的任意字符序列
  • _:匹配单个任意字符

而[字符类]仅能匹配单个属于该类的字符,无法直接让这个字符组重复多次。下面分场景给出解决方案:

1. 必须使用LIKE的情况(无正则扩展)

要匹配仅由数字和逗号组成、且至少出现一次的字符串,可以结合NOT LIKE排除非法字符,同时确保字符串非空:

WHERE column_name NOT LIKE '%[^0-9,]%' 
  AND column_name <> ''

注:[^0-9,]是“否定字符类”,表示匹配不属于数字或逗号的字符,这个写法适用于SQL Server;MySQL的LIKE不支持该语法,需改用正则方案。

2. 更简洁的正则匹配方案(推荐)

现代数据库几乎都支持原生正则匹配,这是处理重复字符组需求的最优解:

  • MySQL/MariaDB:用REGEXP或RLIKE
    WHERE column_name REGEXP '^[0-9,]+$'
    
  • PostgreSQL:用~操作符或SIMILAR TO
    -- 方式1:~ 操作符
    WHERE column_name ~ '^[0-9,]+$'
    -- 方式2:SIMILAR TO(SQL标准正则扩展)
    WHERE column_name SIMILAR TO '([0-9,])+'
    
  • SQL Server(2016+):用REGEXP_LIKE
    WHERE REGEXP_LIKE(column_name, '^[0-9,]+$')
    
  • Oracle:用REGEXP_LIKE
    WHERE REGEXP_LIKE(column_name, '^[0-9,]+$')
    

为什么你的尝试没生效?

你之前用的[0-9,]只能匹配单个数字或逗号;而[0-9,]*在LIKE语法里不表示重复字符组——因为LIKE不把*当作量词,这里的*会被当作字面量字符处理,实际匹配的是“单个数字/逗号+一个*字符”,自然达不到预期效果。

内容的提问来源于stack exchange,提问作者Mark Roworth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:25:09