T-SQL -- 更快地匹配 CASE/WHEN 语句中使用的 NOT LIKE '%[^0-9]%'

T-SQL -- faster way to do match for NOT LIKE '%[^0-9]%' used in CASE/WHEN statement

我正在寻找一种可能更快的方法来进行此检查:

NOT LIKE '%[^0-9]%'

这会检查以确保所有字符都是数字(参见 description of T-SQL pattern

在 Microsoft SQL 服务器 (T-SQL) 中有更快的方法吗?

完整上下文作为 CASE/WHEN 语句的一部分,在 vary large 查询的 select 部分:

Select    DATEADD(dd, CAST(CASE WHEN a.dateDuration NOT LIKE '%[^0-9]%' THEN a.Duration ELSE 1 END AS INT), a.StartDate) AS 'ourEndDate'

在上面,a 是一个 table 别名。列 a.dateDuration 是可为空的 varchar 列。 (出于专有原因,实体的真实名称已被替换)。

事实上,这种变体在各种“UNION ALL”运算符中重复出现,因此如果可以使其更快,则可以大大加快查询速度。

NOT LIKE 运算符可能相对较慢。

底层数据库的版本是SQLServer 2012。

在这种情况下,LIKE / NOT LIKE 运算符的性能几乎可以肯定不是问题。如果您的查询速度很慢,请首先考虑您返回了多少行,以及您是否正在对表进行全面扫描以查找有趣的行。

这里看起来你只是想 format/adjust 你的最终结果 - 如果你认为 SQL 在这里太慢你可以在应用程序服务器端进行这个处理,因为这不是一部分从磁盘获取数据。

如果这是子查询,请显示整个查询。