簡體   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