[英]Find phone numbers with unexpected characters using SQL in Oracle?
我需要找到電話號碼字段包含意外字符的行。
該字段中的大多數值如下所示:
123456-7890
這是預期的。 但是,我們還在此字段中看到了字符值,例如*和#。
我想找到所有存在這些意外字符值的行。
預期:
試過這個:
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.