T-SQL - 对 CASE/WHEN 语句中使用的不像'%[^0-9]%'进行匹配的更快方法



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

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

此检查确保所有字符都是数字(请参阅T-SQL模式的描述(

在Microsoft SQL Server(T-SQL(中有更快的方法吗?

完整的上下文是作为CASE/WHEN语句的一部分,位于一个不同的大型查询的选择部分:

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是一个表别名。列.dateDuration是一个可以为null的varchar列。(由于所有权原因,实体的真实名称已被替换(。

事实上,这种变体在各种";UNION ALL";运算符,因此如果可以加快查询速度,则可以大大加快查询速度。

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

基础数据库的版本为SQL Server 2012。

在这种情况下,LIKE/NOT LIKE运算符的性能几乎可以肯定不是问题。如果查询速度较慢,请首先考虑返回的行数,以及是否对表进行完全扫描以查找插入行。

在这里,您似乎只是在尝试格式化/调整最终结果——如果您认为SQL在这里太慢,您可以在应用程序服务器端进行处理,因为这不是从磁盘获取数据的一部分。

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

相关内容

最新更新