[英]Combine “replace” and wildcards in SQL query
在这样的表中:
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
,用户需要找到一个电话号码(例如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
我怎样才能做到这一点? 我不想告诉用户他们在字段上不能有多个数字。
在MySQL中,“ +”仅是算术运算符。 使用CONCAT()
函数来连接字符串:
....WHERE REPLACE(ph_number, ' ', '') LIKE CONCAT('%', REPLACE('51231234', ' ', ''), '%')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.