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

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

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

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

可能的结果:

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

但也许有人可以建议另一种更优雅的方法来做到这一点?

附注

全文搜索 在我的情况下不是一个选项。

最佳答案

更新:要查找重复出现的数字,您可以使用这样的函数。如果@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。

关于sql - 在 SQL 中查找包含相同数字序列的字符串的最佳方法是什么? (假手机搜索),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27122669/

相关文章:

sql-server - 值不能为空,参数名称 : viewInfo

mysql - SQL 连接中的多个条件

postgresql - 大表上的 Postgres 慢查询

php - 如何将循环中的这两个查询转换为单个 JOINed 查询?

sql - 数据库 "x"的日志不可用

mysql - 如何正确地将索引应用到我的 mysql 数据库

MySQL:在 SELECT 语句中虚拟插入记录

mysql - 这 2 个 JOIN 有什么区别?

sql - 如何查询庞大的MySQL数据库?

php - 如何在PHP中解析XML,生成动态SQL插入语句