Oracle-11g-R2

查詢以使用正則表達式選擇帶有數字字元的“Customer_Num”

  • June 26, 2020

我有一個具有以下結構的表:

Example_table(Customer_Num    varchar2(50))

此表中的一些範例數據:

       Example_table
----------------------------
       Customer_Num
          12445
          12345
          12ttd
          2376y
          23%%*
          23467

我想選擇帶有數字字元的 custoemr_num 記錄,因此這些記錄12ttd , 2376y , 23%%* 不應出現在最終結果中。考慮到我無法更改表結構這一事實,哪一個是正確的查詢?

Q-1:
 select customer_num
 from Example_table 
 where REGEXP_LIKE(customer_num, '[[:digit:]]')


Q-2:
 select customer_num
 from Example_table 
 where REGEXP_LIKE(customer_num, '[0-9]')

是否存在這些查詢可能最終產生錯誤結果的特殊情況?提前致謝。

兩者都不正確,因為兩者都只檢查可以出現在字元串中任何位置的單個數字。

選擇完整字元串中的數字的正則表達式是:

where REGEXP_LIKE(customer_num, '^[0-9]+$')
  • ^將表達式錨定在字元串的開頭(以避免前導非數字)
  • [0-9]+匹配多個數字但至少一個
  • $將表達式錨定在字元串的末尾(以避免尾隨非數字)

[0-9]使用和使用沒有區別[[:digit:]]

引用自:https://dba.stackexchange.com/questions/269928