Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Oracle中使用类似regexp_的方法使用一系列值匹配多个字符串条件_Sql_Oracle_Regexp Like - Fatal编程技术网

Sql 在Oracle中使用类似regexp_的方法使用一系列值匹配多个字符串条件

Sql 在Oracle中使用类似regexp_的方法使用一系列值匹配多个字符串条件,sql,oracle,regexp-like,Sql,Oracle,Regexp Like,我的Oracle DB中有一个包含代码的字段,我需要使用一系列值从中提取多个值 例如,我需要提取C00.0-C39.9范围内的所有代码,即以C开头,第二个字符可以是0-3,第三个字符是0-9,后面是a。最后一个数字是0-9,例如 CODES ----- C00.0 C10.4 C15.8 C39.8 上面的例子是一个模式,我有多个模式要匹配,这里是另一个例子 C50.011-C69.92 同样,从C开始,第二个字符是5-6,第三个是0-9,第四个是,第五个是0-9,第六个是1-2等等 我已尝

我的Oracle DB中有一个包含代码的字段,我需要使用一系列值从中提取多个值

例如,我需要提取C00.0-C39.9范围内的所有代码,即以C开头,第二个字符可以是0-3,第三个字符是0-9,后面是a。最后一个数字是0-9,例如

CODES
-----
C00.0
C10.4
C15.8
C39.8
上面的例子是一个模式,我有多个模式要匹配,这里是另一个例子

C50.011-C69.92
同样,从C开始,第二个字符是5-6,第三个是0-9,第四个是,第五个是0-9,第六个是1-2等等

我已尝试了以下操作,但我的管道函数似乎没有拾取第二个条件,因此我只获取第一个条件“^[C][0-3][0-9][.][0-9]”的结果:


如果有人能就我如何提取额外的模式提出建议,我将不胜感激。

您在模式中有新行-换句话说,您对可读性的尝试导致了问题。您可以删除它们,尽管我可能会排除常见元素:

WHERE REGEXP_LIKE (CODES, '^[C]([0-3][0-9][.][0-9]|[4][0-3][.][0-9]|[4][A][.][0-9]|[4][4-9][.][0-9]|[4][9][.][A][0-9]|[5-6][0-9][.][0-9][1-9]|[7][0-5][.][0-9]|[7][A-B][.][0-8])')
我想你最后还想要美元

如果您想要可读性,可以使用或:


模式中有新行-换句话说,您试图提高可读性导致了问题。您可以删除它们,尽管我可能会排除常见元素:

WHERE REGEXP_LIKE (CODES, '^[C]([0-3][0-9][.][0-9]|[4][0-3][.][0-9]|[4][A][.][0-9]|[4][4-9][.][0-9]|[4][9][.][A][0-9]|[5-6][0-9][.][0-9][1-9]|[7][0-5][.][0-9]|[7][A-B][.][0-8])')
我想你最后还想要美元

如果您想要可读性,可以使用或:


下面是您希望在此处匹配的正则表达式模式:

^C[0-3][0-9][.][0-9]$ 这将匹配C00.0-C39.9的范围。如果您想匹配其他范围,那么您需要使用另一种模式进行替换以覆盖这些范围

将此应用于当前查询:

选择不同的代码 从你的桌子上 其中REGEXP_类代码“^C[0-3][0-9][.][0-9]$”;
下面是您希望在此处匹配的正则表达式模式:

^C[0-3][0-9][.][0-9]$ 这将匹配C00.0-C39.9的范围。如果您想匹配其他范围,那么您需要使用另一种模式进行替换以覆盖这些范围

将此应用于当前查询:

选择不同的代码 从你的桌子上 其中REGEXP_类代码“^C[0-3][0-9][.][0-9]$”;
SELECT DISTINCT CODES
FROM TABLE
WHERE REGEXP_LIKE (CODES, '^[C][0-3][0-9][.][0-9]') OR
      REGEXP_LIKE (CODES, '^[C][4][0-3][.][0-9]|') OR
      . . .