2013-11-26 97 views
2

我有以下查詢:MYSQL中的REGEX無法正常工作?

SELECT COUNT(*) 
FROM 'users' 
WHERE (
summary REGEXP '^\\(?[\\d]{3}\\)?[\\s-]?[\\d]{3}[\\s-]?[\\d]{4}$' OR 
bio REGEXP '^\\(?[\\d]{3}\\)?[\\s-]?[\\d]{3}[\\s-]?[\\d]{4}$' OR 
about_me REGEXP '^\\(?[\\d]{3}\\)?[\\s-]?[\\d]{3}[\\s-]?[\\d]{4}$' 
);604-456-1234 

我已經測試了正則表達式的位置 - >http://rubular.com/和它適合我的情況。

我有一個用戶的生物「604-456-1234」上有下列字符串,它應該返回,但不是。

爲什麼?

+2

我沒有仔細看看你的查詢,所以我不能給你具體的查詢,但在Ruby中的正則表達式肯定不是MySQL中的正則表達式,所以它不是特別的令人驚訝的是,如果它不匹配使用rubular.com devloping – dirkk

+2

如果你有一個大表,並需要定期執行該查詢,你會去有重大的性能問題,因爲您需要執行全表掃描才能完成查詢。如果這是你的系統的常規部分,你需要在他們的信息中找到具有電話號碼的用戶,也許你會考慮添加一個'has_phone' tinyint字段來查詢,並根據手機的存在插入數據時設置該字段信息。 –

回答

2

我的錯誤,你做錯了[\ d]不工作,你需要使用[0-9],所以使用:

'^\\(?[0-9]{3}\\)?[\\s-]?[0-9]{3}[\\s-]?[0-9]{4}$' 

作品,具體看這裏:http://dev.mysql.com/doc/refman/5.1/en/regexp.html沒有參考\d被支持

+0

還有一個問題,你知道如何使正則表達式匹配「asdasdadsad(604)456-1234」...現在它只匹配「(604)456-1234」如果沒有其他字符串。 Thx @nrathaus – content01

+0

從一開始就刪除''''''''''''意味着「以」開頭「 – nrathaus