如何使用LIKE运算符匹配指定位数数字的正确模式?
嘿,我来帮你搞定这个LIKE匹配的问题!你现在的模式只能匹配单个数字,要覆盖多位数字的情况,只需要调整一下通配符的组合就行啦。
首先,SQL Server的原生LIKE不支持像正则里的+那种“一个或多个”的量词,但我们可以用现有通配符组合出同样的效果。把你原来的'<<PointBalance,[0-9]>>'改成'<<PointBalance,[0-9][0-9]*>>'就可以匹配任意位数的数字了。
给你写个完整的测试代码:
DECLARE @exp1 varchar(100) = '<<PointBalance , 8>>' DECLARE @exp2 varchar(100) = '<<PointBalance , 985>>' -- 调整后的匹配模式,支持1位或多位数字 IF (TRIM(REPLACE(@exp1, ' ', '')) LIKE '<<PointBalance,[0-9][0-9]*>>') PRINT '@exp1 匹配成功' IF (TRIM(REPLACE(@exp2, ' ', '')) LIKE '<<PointBalance,[0-9][0-9]*>>') PRINT '@exp2 匹配成功'
为啥这个模式管用?
[0-9]:先确保有至少一位数字(对应你示例里的8或者985的第一位9)[0-9]*:允许后面跟任意多位数字(0个或多个,所以1位数字的情况也能匹配,多位的比如985后面的8和5也能覆盖)
如果你担心逗号后面可能出现非数字字符,这个模式还能保证只匹配纯数字的情况,比直接用%更精准(%会匹配任何字符,包括字母、符号这些)。
要是你的SQL Server版本是2017及以上,也可以试试用字符串函数提取数字部分再验证,但用LIKE的方式最直接贴合你现在的字符串模式匹配需求。
内容的提问来源于stack exchange,提问作者Meyssam Toluie
相关产品推荐
相关产品推荐

