Sql 在Oracle中使用类似regexp_的方法使用一系列值匹配多个字符串条件
我的Oracle DB中有一个包含代码的字段,我需要使用一系列值从中提取多个值 例如,我需要提取C00.0-C39.9范围内的所有代码,即以C开头,第二个字符可以是0-3,第三个字符是0-9,后面是a。最后一个数字是0-9,例如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等等 我已尝
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
. . .