首页 > 解决方案 > 不理解 Oracle 中的 regexp_like

问题描述

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

'.+d\$'sec_level_pattern

现在我可以在选择查询中看到以下条件:

not regexp_like(name,sec_level_pattern)

name是我rd_tst表中的列。

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

标签: sqloracleregexp-like

解决方案


我需要更改什么sec_level_pattern才能返回所有名称?

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

  • 字符串的开始;
  • 两个大写字母字符;
  • 十个大写字母数字字符;
  • 字符.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;

返回所有名称:

| 姓名 |
| :--------------- |
| 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<>在这里摆弄


推荐阅读