如何在SQL的PATINDEX中匹配排除U的字母正则表达式
PATINDEX正则匹配003开头且第四位非U/u的字符串
要实现匹配前3位为003、第4位为除U/u外任意字母的需求,你需要调整字符范围的写法——SQL的PATINDEX模式匹配中,字符集内的排除逻辑不能直接将^Uu混入字母范围,而是要拆分字母区间来避开U和u:
正确的表达式写法
SELECT PATINDEX('%003[A-TV-Za-tv-z]%', '目标字符串')
为什么之前的写法无效
- 第一种写法
%[0][0][3][A-Za-z^Uu]%:字符集内的^只有放在开头时才表示排除,放在中间只是普通字符,所以无法排除U/u。 - 第二种写法
%[0][0][3][A-Za-z][^Uu]%:这是匹配003+任意字母+非U/u字符,相当于要求第5位不是U/u,完全不符合你对第4位的限制需求。
测试验证
匹配符合条件的字符串:
SELECT PATINDEX('%003[A-TV-Za-tv-z]%', '003A654') -- 返回1,匹配成功 SELECT PATINDEX('%003[A-TV-Za-tv-z]%', '003v123') -- 返回1,匹配成功
匹配不符合条件的字符串:
SELECT PATINDEX('%003[A-TV-Za-tv-z]%', '003U654') -- 返回0,不匹配 SELECT PATINDEX('%003[A-TV-Za-tv-z]%', '003u456') -- 返回0,不匹配
内容的提问来源于stack exchange,提问作者Dizzy49
相关产品推荐
相关产品推荐

