繁体   English   中英

在SQL查询中结合“替换”和通配符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM