不了解Oracle中的regexp_like

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

'.+d\$'作为sec_level_pattern,来自双重

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

not regexp_like(name,sec_level_pattern)

name是我的rd_tst表中的列。

条件regexp_like在这里检查什么?我几乎没有发现关于regexp_like的问题,但不了解在这里我的用例中将实际检查什么。

zrchuo 回答:不了解Oracle中的regexp_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;

返回所有名称:

| 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 提琴here

,

此模式:

'.+d\$'

确实是字符串。它正在寻找至少一个字符(通常是非换行符),后跟小写字母'd',然后是文字'$'。因此,这符合:

Xd$
123d$abc

它等效于:like '%_d$%'

很可能您打算使用更合理的'\d+$'。这将匹配任何以数字结尾的字符串。

本文链接:https://www.f2er.com/1438367.html

大家都在问