选择不是PL / SQL中的Slashed行

时间:2013-04-29 15:23:03

标签: sql regex oracle

我在表CODE_DETAILS中有一个名为CODES的列,其中包含

等值

ABCD \ DRD, ABCD \ X \ 1, ABCD \ X \ 2, ABCD \ Y \ 7, ABCD \ PRE

我想选择所有以ABCD \开头的行,但我不希望以X \ 1,X \ 2和Y \ 7结尾的行

2 个答案:

答案 0 :(得分:2)

您也可以使用常规like

执行此操作
where codes like 'ABCD\%' and
      codes not like '%X\1' and
      codes not like `%X\2' and
      codes not like `%Y\7'

正则表达式比标准SQL like运算符强大得多。但是,like在数据库中是可移植的,并且更容易理解。

答案 1 :(得分:1)

如果您想明确排除以X\1X\2Y\7结尾的代码,请尝试以下操作:

SELECT * FROM code_details
WHERE REGEXP_LIKE (codes, '^ABCD\\')
  AND NOT REGEXP_LIKE(codes, '((X\\1)|(X\\2)|(Y\\7))$')