我有一个要求,我必须在表的ref_id字段中以特殊模式查找记录数。这是一个varchar列。我需要找到第8、9和10个字符为数字+ XX的所有记录。那应该是2XX或8XX。我尝试使用regexp:digit:但没有运气。本质上,我正在寻找所有第8-10个字符为1XX,2XX,3XX等的记录...
答案 0 :(得分:2)
使用REGEXP_LIKE,将table
替换为您的:
SELECT COUNT(*)
FROM table
WHERE REGEXP_LIKE(ref_id,'^.{7}[0-9]XX');
.{7}
七个字符
[0-9]
的第8个字符数字
XX
第9和第10个字符X
或者与您提到的[:digit:]
类一起使用,您可以使用:
SELECT COUNT(*)
FROM table
WHERE REGEXP_LIKE(ref_id,'^.{7}[[:digit:]]XX');
答案 1 :(得分:2)
这也可以使用标准的非正则表达式SQL函数来实现
select * from t where s like '________XX%' -- any 8 characters and then XX
AND translate( substr(s,8,1),'?0123456789','?') is null; --8th one is numeric
答案 2 :(得分:0)
不需要正则表达式:
select * from mytable where substr(ref_id, 8, 3) in ('0XX','1XX','2XX','3XX','4XX','5XX','6XX','7XX','8XX','9XX')
或
select * from mytable where substr(ref_id, 8, 3) in ('1XX','2XX','3XX','4XX','5XX','6XX','7XX','8XX','9XX')
我不知道“ 0XX”是否有效。
正则表达式的运行速度通常很慢。