2017-04-14 113 views
0

我試圖根據最後6位數字來匹配電話號碼。問題是數據庫中的數字有多種格式,有些數字中有空格。MySQL select語句刪除WHERE子句中的空白

SELECT * FROM users WHERE trim(phone) LIKE '%123456' 

修剪只刪除了開頭和結尾的空白,並沒有發現其中的客戶數量之間進入了他們的數字與空白條目: 123 456 12 34 56等

那麼如何刪除搜索內的空白處?沒有空白的結果是不夠的。使用替換更新數據庫也不是一個選項。

回答

0

使用replace()可以將所有出現的''替換爲字符串中的''。

mySQL documentation

REPLACE(str,from_str,to_str) 

返回與字符串的所有出現由字符串to_str from_str均被替換字符串str。搜索from_str時,REPLACE()執行區分大小寫的匹配。

SELECT * FROM users WHERE Replace(coalesce(Phone,''), ' ','') LIKE '%123456' 

如果你不能在where子句中這樣做,這對我來說似乎很奇怪;只需將它嵌入選擇。

Select sub.* 
from (Select u.*, Replace(coalesce(Phone,''), ' ','') as ph 
       from users u) sub 
where sub.ph LIKE '%123456' 
+0

其實我沒有嘗試,但我得到phpMyAdmin的錯誤:「#1064 - 你在你的SQL語法錯誤;檢查對應於您的MariaDB的服務器版本使用附近的正確語法手冊」 。使用trim()函數我沒有錯誤,但由於某種原因,replace()不起作用。 –

+0

我猜一些電話號碼是NULL,所以我們需要合併那些空集''。 – xQbert

+0

仍然不能與coalesce一起使用。替換隻適用於SELECT後(在結果中數字格式化的權利),但不是在WHERE後(所以它會找到所有條目) –