在SQL中查找包含相同数字序列的字符串的最佳方法是什么? (假手机搜索)

时间:2014-11-25 09:14:55

标签: sql sql-server query-optimization sql-like

首先想到的是使用由LIKE分隔的一组OR条件(如下所示)。

(p.string like '%1111111%'
or p.string like '%2222222%'
or p.string like '%3333333%'
or p.string like '%4444444%'
...)

可能的结果:

Phone
----------
761111111
3718888888
+214444444

但也许有人可以提出另一种 - 更优雅的方式来做到这一点?

P.S。

在我的情况下,

Full-text-search不是一个选项。

2 个答案:

答案 0 :(得分:2)

更新:要查找定期数字,您可以使用此类功能。如果@text中的任何字符连续至少使用@min次,则返回1。

create function IsRecurring(@text varchar(255), @min int) returns int as
begin
    declare @i int = len(@text) - @min + 1
    declare @result int = 0
    while @i > 0 begin
        if replace(substring(@text, @i, @min), substring(@text, @i, 1), '') = '' begin
            select @result = 1
            break
        end
        select @i = @i - 1
    end
    return @result
end

使用示例:

select dbo.IsRecurring('84455552', 4)

如果任何字符连续至少使用4次,则返回1。

答案 1 :(得分:0)

执行以下操作:

select field_name 
from table_name 
where  CONTAINS(field_name, '"1111111*" OR "2222222*" OR "3333333*"')

确保在使用此功能时安装了全文搜索功能。

参考here