我有一个大表,其中包含格式不一致的电话号码列。 即01234567890或可能01234 567 890。
我正在寻找一个select语句,只要用户搜索包含正确顺序的数字,无论数据库中记录的间距如何,都会返回记录。
因此,如果用户使用0123456789进行搜索,则会返回包含01234 567 890的记录,反之亦然。
目前正在使用喜欢但不能按照我的意愿工作。有什么想法吗?
SELECT *
FROM contacts
WHERE telephone LIKE '%01234567890%
答案 0 :(得分:1)
替换()应该适合你。
WHERE REPLACE(telephone,' ','') = 01234567890
答案 1 :(得分:1)
我建议在进行比较之前删除空格和其他字符:
SELECT *
FROM contacts
WHERE replace(replace(replace(replace(telephone, ' ', ''), '(', ''), ')', ''), '-') LIKE '%01234567890%';
这会删除空格,括号和连字符。
你也可以通过修复模式来做到这一点:
where telephone like '%0%1%2%3%4%5%6%7%8%9%0%'
通配符%
可以匹配零个或多个字符,因此它会按正确的顺序找到数字。
答案 2 :(得分:0)
点击此主题:T-SQL trim   (and other non-alphanumeric characters)
有一个函数列在CREATE FUNCTION [dbo]。[fnRemoveBadCharacter]我已经使用了几次(你会想要改变它,所以不再允许使用这些字符)。它将提供一个函数,将为您删除字符串中的所有时髦格式,并保留0-9。那么你喜欢新格式化字段的声明:
where fnRemoveBadCharacter(telephone) like '%18005550090%'
答案 3 :(得分:0)
使用REPLACE
函数
SELECT *
FROM contacts
WHERE REPLACE(telephone, ' ', '') LIKE '%01234567890%
答案 4 :(得分:0)
试试这个:
WHERE REPLACE(telephone, ' ', '') LIKE '%01234567890%'
答案 5 :(得分:0)
从长远来看,使用update删除该列中的空格可能会很好,并且在插入期间也要注意空格,以便在select期间提高性能,因为提到表格很大