Sql在字符串可能包含空格时选择

时间:2014-08-21 23:08:26

标签: sql sql-server

我有一个大表,其中包含格式不一致的电话号码列。 即01234567890或可能01234 567 890。

我正在寻找一个select语句,只要用户搜索包含正确顺序的数字,无论数据库中记录的间距如何,都会返回记录。

因此,如果用户使用0123456789进行搜索,则会返回包含01234 567 890的记录,反之亦然。

目前正在使用喜欢但不能按照我的意愿工作。有什么想法吗?

SELECT * 
FROM contacts
WHERE telephone LIKE '%01234567890%

6 个答案:

答案 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 &nbsp (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期间提高性能,因为提到表格很大