簡體   English   中英

Select 其中 field1 或 field2 或 field3 等於電話號碼

[英]Select where field1 or field2 or field3 is equal to a phone number

我正在看一張帶有 phone1、phone2 和 mobile 的桌子。 但是,電話字符串的格式不正確。

電話號碼基本上是這樣的自由文本:

row1: phone1:19123123123
row2: mobile:+1 912 123 123
row3: phone2:1 912 123 123
row4: mobile:(+1) 912 123 123
row5: phone2:(+1)912-123-123

是否可以編寫一個 SQL 查詢來查找 phone1、phone2 或 mobile 字段之一是否為 +19123123123,但它需要能夠匹配這些自由文本示例中的任何一個? 謝謝

因此,在上面的示例中,它應該返回所有 5 條記錄,即那些與該電話號碼匹配的自由文本,並且位於 3 個字段之一中。

假設列中唯一的數字和+在電話號碼中,您可以使用:

where regexp_replace(col, '[^+0-9]', '') = '+19123123123'

這將刪除不是+或數字的所有內容。

您可以使用正則表達式來識別電話號碼模式,或者您可以從 where 子句的兩側刪除所有括號和空格,然后進行比較。

     SELECT * FROM T 
    WHERE REPLACE(REPLACE(REPLACE(phone1, '(',''),')',''),' ','') = '+19123123123'
        OR REPLACE(REPLACE(REPLACE(phone1, '(',''),')',''),' ','') = '19123123123'
        OR REPLACE(REPLACE(REPLACE(phone2, '(',''),')',''),' ','') = '+19123123123'
        OR REPLACE(REPLACE(REPLACE(phone2, '(',''),')',''),' ','') = '19123123123'
        OR REPLACE(REPLACE(REPLACE(mobile, '(',''),')',''),' ','') = '+19123123123'
        OR REPLACE(REPLACE(REPLACE(mobile, '(',''),')',''),' ','') = '19123123123'

正如 Juergen 所建議的,您可以去除所有非數字字符並進行比較。 如果您使用的是 MySQL 8.0+,您可以使用以下代碼

REGEXP_REPLACE(SUBSTRING_INDEX(column_name, ':', -1),'[^0-9]+',"")

假設:在 mobile/phone/sometext 之后,列值始終用冒號 (:)分隔。 在這里,它將在冒號之后獲取字符串的第二部分,然后去除非數字字符

暫無
暫無

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

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