我有一个表,其列的数据类型为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])
任何帮助将不胜感激!
欢呼声
答案 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])$')
请注意,正则表达式([ ... ]
)中的类列出了要匹配的单个字符,而不是序列。