双位数数值范围正则表达式
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 但我自己从来没有走那条路。
我一直在尝试编写一个正则表达式来匹配严重性错误 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 但我自己从来没有走那条路。