Oracle SQL正则表达式匹配Varchar列 - 视为数字

时间:2016-11-01 10:22:41

标签: sql regex oracle

我有一个表,其列的数据类型为VARCHAR2(7个字符)。此列中的数据具有诸如1006,1007,2002等的值

我想要一个匹配4002,4003,4005,4011,4013但不是4001的正则表达式。

首先我尝试使用To_number(columnName) > 4001,但得到了ORA-01722无效数字错误。

然后我尝试使用Regexp_like失败了。我试过了:

 1. 40[02,03,05,11,13]
 2. 40[0,1][^01]
 3. 40[0,1]([2,3,5,11])

任何帮助将不胜感激!

欢呼声

1 个答案:

答案 0 :(得分:5)

你可以使用这个条件:

 col in ('4002','4003','4005','4011','4013')

如果你真的需要用regexp_like来做,那么有几种方法可以做到。以下是一些降低可读性和长度的顺序:

 regexp_like(col, '^(4002|4003|4005|4011|4013)$')
 regexp_like(col, '^40(02|03|05|11|13)$')
 regexp_like(col, '^40(0[235]|1[13])$')

请注意,正则表达式([ ... ])中的类列出了要匹配的单个字符,而不是序列。