Oracle-11g-R2
查詢以使用正則表達式選擇帶有數字字元的“Customer_Num”
我有一個具有以下結構的表:
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:]]