不了解 Oracle 中的 regexp_like

not understanding regexp_like in Oracle

我在查询中的 With 子句中定义了以下示例:

'.+d$' 作为 sec_level_pattern 来自 dual

现在我可以在 select 查询中看到以下情况:

not regexp_like(name,sec_level_pattern)

name 是我的 rd_tst table.

的专栏

条件 regexp_like 在这里检查什么?我几乎没有看到关于 regexp_like 的问题,但不明白我的用例中实际会检查什么。

这个模式:

'.+d$'

确实是字符串。它正在寻找至少一个字符(通常为 non-newline),后跟小写字母 'd',然后是文字 '$'。所以,这匹配:

Xd$
123d$abc

相当于:like '%_d$%'.

很有可能,您想要更合理的 '\d+$'。这将匹配任何以数字结尾的字符串。

what did i need to change for sec_level_pattern to return all the name ?

您的示例数据似乎具有以下格式:

  • 字符串的开始;
  • 两个 upper-case 字母字符;
  • 十个upper-casealpha-numeric个字符;
  • 字符.GTX;然后
  • 字符串结束。

您需要一个匹配相同内容的正则表达式,例如:

SELECT *
FROM   table_name
WHERE  REGEXP_LIKE( names, '^[A-Z]{2}[A-Z0-9]{10}\.GTX$' );

您的示例数据:

CREATE TABLE table_name ( Names ) AS
SELECT 'AT0000730007.GTX' FROM DUAL UNION ALL
SELECT 'CH0012032048.GTX' FROM DUAL UNION ALL
SELECT 'DE0005550602.GTX' FROM DUAL UNION ALL
SELECT 'DE0007236101.GTX' FROM DUAL UNION ALL
SELECT 'DE000A1EWWW0.GTX' FROM DUAL UNION ALL
SELECT 'DE000ENAG999.GTX' FROM DUAL UNION ALL
SELECT 'DE000TUAG000.GTX' FROM DUAL UNION ALL
SELECT 'FI0009000681.GTX' FROM DUAL UNION ALL
SELECT 'FR0000120172.GTX' FROM DUAL UNION ALL
SELECT 'FR0000125007.GTX' FROM DUAL UNION ALL
SELECT 'IT0003132476.GTX' FROM DUAL UNION ALL
SELECT 'NL0000235190.GTX' FROM DUAL UNION ALL
SELECT 'NL0011794037.GTX' FROM DUAL UNION ALL
SELECT 'SE0000148884.GTX' FROM DUAL;

Returns所有名字:

| NAMES            |
| :--------------- |
| AT0000730007.GTX |
| CH0012032048.GTX |
| DE0005550602.GTX |
| DE0007236101.GTX |
| DE000A1EWWW0.GTX |
| DE000ENAG999.GTX |
| DE000TUAG000.GTX |
| FI0009000681.GTX |
| FR0000120172.GTX |
| FR0000125007.GTX |
| IT0003132476.GTX |
| NL0000235190.GTX |
| NL0011794037.GTX |
| SE0000148884.GTX |

db<>fiddle here