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

Nic*_*ick 1 regex sql 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])
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激!

干杯

tri*_*cot 5

你可以使用这个条件:

 col in ('4002','4003','4005','4011','4013')
Run Code Online (Sandbox Code Playgroud)

如果你真的需要这样做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])$')
Run Code Online (Sandbox Code Playgroud)

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