在SQL查询

时间:2016-01-12 17:51:27

标签: mysql

在这样的表格中:

ID| ph_number
-----------
1 | 51231234
2 | 5123 1234
3 | 51231234; 61231234
4 | 5123 1234; 61231234
5 | 5123 1934; 6123 1234
6 | 5123 1234; 6123 1234
7 | aargh; 5123 1234; 6123 1234

,用户需要找到一个电话号码(ex 51231234),不知道空格在哪里,或者每个字段的数量是多少。我可以通过这样的查询找到没有空格的数字:

SELECT ID, ph_number FROM test WHERE REPLACE(ph_number, ' ', '') LIKE REPLACE('51231234', ' ', '')

返回ID 1和2,或

SELECT ID, ph_number FROM test WHERE ph_number LIKE '%51231234%'

返回ID 1和3.但是需要的是ID 1,2,3,4,6和7.我无法组合这两个查询。试过了:

SELECT ID, ph_number FROM test WHERE REPLACE(ph_number, ' ', '') LIKE ('%' + REPLACE('51231234', ' ', '') + '%') // returns 1 & 2
SELECT ID, ph_number FROM test WHERE REPLACE(ph_number, ' ', '') LIKE '%' + REPLACE('51231234', ' ', '') + '%' // returns ERROR

我怎么能实现这个目标?我不想告诉用户他们在这个领域不能有多个号码。

1 个答案:

答案 0 :(得分:1)

在MySQL中,“+”完全是算术运算符。使用CONCAT()函数来连接字符串:

....WHERE REPLACE(ph_number, ' ', '') LIKE CONCAT('%', REPLACE('51231234', ' ', ''), '%')