簡體   English   中英

在Oracle中使用SQL查找帶有意外字符的電話號碼?

[英]Find phone numbers with unexpected characters using SQL in Oracle?

我需要找到電話號碼字段包含意外字符的行。

該字段中的大多數值如下所示:

123456-7890

這是預期的。 但是,我們還在此字段中看到了字符值,例如*和#。

我想找到所有存在這些意外字符值的行。

預期:

  • 預期數字
  • 帶有數字的連字符是預期的(單獨的連字符不是)
  • 預期為NULL
  • 預計為空

試過這個:

WHERE phone_num is not like ' %[0-9,-,' ' ]%

仍然會在電話中顯示行號。

您可以從https://regexr.com/3c53v地址編輯正則表達式來滿足您的需求。

我將為此使用示例正則表達式

select * from Table1
Where NOT REGEXP_LIKE(PhoneNumberColumn, '^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$')

您可以使用regexp_like()

...
WHERE regexp_like(phone_num, '[^ 0123456789-]|^-|-$')

[^ 0123456789-]匹配任何非空格,數字或連字符的字符。 ^-匹配字符串的開頭和結尾的-$ 管道是“或”,即如果模式a匹配,如果模式b匹配,則a|b b匹配。

您可以使用translate()

...
WHERE translate(Phone_Number,'a1234567890-', 'a') is NOT NULL

這將刪除所有有效字符,並保留無效字符。 如果所有字符均有效,則結果將為NULL。 這不會驗證格式,因為您需要使用REGEXP_LIKE或類似的格式。

Oracle具有REGEXP_LIKE用於正則表達式比較:

WHERE REGEXP_LIKE(phone_num,'[^0-9''\-]')

如果您不熟悉正則表達式,那么有很多不錯的網站可以幫助您構建它們。 我喜歡這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM