繁体   English   中英

不理解 Oracle 中的 regexp_like

[英]not understanding regexp_like in Oracle

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

'.+d\$'作为 dual 的sec_level_pattern

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

not regexp_like(name,sec_level_pattern)

name是我的rd_tst表中的列。

条件regexp_like在这里检查什么? 我几乎没有看到关于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;

返回所有名称:

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

这种模式:

'.+d\$'

真的是字符串。 它正在寻找至少一个字符(通常是非换行符),后跟小写字母'd' ,然后是文字'$' 所以,这匹配:

Xd$
123d$abc

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM