![](/img/trans.png)
[英]Mysql where query… select * where field1 +field2 + field3 <= field 4
[英]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.