如何在SQL中识别数字和字符的组合

时间:2019-04-29 08:40:11

标签: sql regex oracle

我有一个要求,我必须在表的ref_id字段中以特殊模式查找记录数。这是一个varchar列。我需要找到第8、9和10个字符为数字+ XX的所有记录。那应该是2XX或8XX。我尝试使用regexp:digit:但没有运气。本质上,我正在寻找所有第8-10个字符为1XX,2XX,3XX等的记录...

3 个答案:

答案 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

DEMO

答案 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”是否有效。

正则表达式的运行速度通常很慢。