什么是正则表达式,用于重复相同的数字5次或更多次,例如11111、22222、33333、44444

时间:2018-10-10 15:10:02

标签: sql-server regex

什么是正则表达式,重复相同的数字5次或多次,例如11111、22222、33333、44444。我使用的是SQL服务器,例如查询

2 个答案:

答案 0 :(得分:2)

您可以尝试以下方法:

(\d)\1{4,}

它是这样工作的:

enter image description here

这是regex101.com

的解释
1st Capturing Group (\d)
\d matches a digit (equal to [0-9])
\1{4,} matches the same text as most recently matched by the 1st capturing group
{4,} Quantifier — Matches between 4 and unlimited times, as many times as 
possible, giving back as needed (greedy)
Global pattern flags
g modifier: global. All matches (don't return after first match)
m modifier: multi line. Causes ^ and $ to match the begin/end of each line 
(not only begin/end of string)

答案 1 :(得分:2)

SQL Server中不会有正则表达式来完成您要执行的操作。您可以参考这篇文章,其中概述了如何在带有LIKE的T-SQL中使用正则表达式:https://www.mssqltips.com/sqlservertutorial/9106/using-regular-expressions-with-tsql-from-beginner-to-advanced/

要在SQL Server 2008+中重复字符,可以使用REPLICATE。

  

REPLICATE:将字符串值重复指定的次数。

根据先前的评论,您可能正在进行某种电话号码评估。这是一个示例,可以帮助您完成以下任务:

DECLARE @PhoneNumbers TABLE
    (
        [HomePhone] NVARCHAR(500)
    );

INSERT INTO @PhoneNumbers (
                              [HomePhone]
                          )
VALUES ( N'123546789' )
     , ( N'111111111' )
     , ( N'555555555' )
     , ( N'222222222' )
     , ( N'231111123' )
     , ( N'897777712' )
     , ( N'010101010' )
     , ( N'333344444' )
     , ( N'123546789' );

SELECT *
FROM   @PhoneNumbers
WHERE  [HomePhone] LIKE '%' + REPLICATE('1', 5) + '%'
       OR [HomePhone] LIKE '%' + REPLICATE('2', 5) + '%'
       OR [HomePhone] LIKE '%' + REPLICATE('3', 5) + '%'
       OR [HomePhone] LIKE '%' + REPLICATE('4', 5) + '%'
       OR [HomePhone] LIKE '%' + REPLICATE('5', 5) + '%'
       OR [HomePhone] LIKE '%' + REPLICATE('6', 5) + '%'
       OR [HomePhone] LIKE '%' + REPLICATE('7', 5) + '%';

在这种情况下使用REPLICATE进行思考可能不会为您带来任何好处,因为键入REPLICATE('1',5)与将其键入为'11111'并没有太大区别。但是应该让您对重复字符的功能有所了解。

您曾经提到过,where子句中的重复项不是一个选项。如果最终您要评估的是HomePhone的整个值是否都在重复,则可以执行以下操作:

    SELECT *
    FROM   @PhoneNumbers
    WHERE [HomePhone] = REPLICATE(LEFT([HomePhone],1), LEN([HomePhone]))

这里发生的所有事情就是采用最左边的字符HomehPhone,复制值的长度并查看其是否匹配。