双位数数值范围正则表达式

Double digit numeric range regex

我一直在尝试编写一个正则表达式来匹配严重性错误 17 - 25,查看错误日志。 (我可以提供将错误日志记录放入暂存区进行处理所需的完整代码 table,但我认为对于正则表达式而言没有必要)

我能得到的最接近的是...

...
where [Message] like '%Severity: [12][789012345]%'
...

...但是,由于第一组中的 1 + 第二组中的其他数字的组合,这最终会匹配严重性错误,例如 12、13、14、15..

我最终只写了一组 like 语句来实现它...

...
where [Message] like '%Severity: 17%' 
    or [Message] like '%Severity: 18%' 
    or [Message] like '%Severity: 19%'
    or [Message] like '%Severity: 20%'
    or [Message] like '%Severity: 21%'
    or [Message] like '%Severity: 22%'
    or [Message] like '%Severity: 23%'
    or [Message] like '%Severity: 24%'
    or [Message] like '%Severity: 25%'

不幸的是SQL服务器正则表达式非常有限,所以我不能使用完整的标准。

请注意,即使正则表达式和多个 like 语句之间的执行计划相同,为了代码简洁,我更愿意使用正则表达式,它看起来更简洁..除非多个 like 语句的性能更好,在这种情况下我更喜欢性能,因为我经常查看具有数十万或数百万行的客户端日志。

是否可以为数字范围 17 - 25 编写 SQL 服务器正则表达式?

Is it possible to write a SQL Server regex for a numeric range 17 - 25?

不适用于本机 TSQL。

虽然您可以编写一个 CLR 函数来执行此操作。

使用本机 TSQL 字符串函数,您可能会解析出严重性值,然后对其进行测试。

WHERE  TRY_CONVERT(INT, 
                   SUBSTRING([Message], 
                             NULLIF(PATINDEX('%Severity: [1-2][0-9]%', [Message] ) + 10, 0), 
                             2)
                   ) BETWEEN 17 AND 25 

访问正确 Regex 的另一种方法是通过 Java language extension 但我自己从来没有走那条路。