Djo*_*jof 10 sql t-sql sql-server optimization string-comparison
我需要将字符串的结尾与存储过程中可能结束的列表进行比较.这将被称为很多,并有大约10-15个候选人结局.此时,仅代码解决方案优于创建专用于此的表.有点像:
IF (ENDSWITH(@var, 'foo') OR
ENDSWITH(@var, 'bar') OR
ENDSWITH(@var, 'badger') OR
ENDSWITH(@var, 'snake'))
(
)
Run Code Online (Sandbox Code Playgroud)
我正在寻找速度方面的最佳方式,同时也是可维护性.我知道的候选人是
对,我最喜欢的,但这意味着我必须对字符串长度进行硬编码,因此容易出错.它还意味着多次切割源字符串.
IF ((LEN(@var) >= 3 AND RIGHT(@var, 3) = 'foo')) OR ...
Run Code Online (Sandbox Code Playgroud)喜欢,可能更慢,但有点清洁
IF (@var LIKE '%foo') OR ...
Run Code Online (Sandbox Code Playgroud)CHARINDEX,因为它搜索整个字符串,所以可能更慢
SUBSTRING,很可能等同于RIGHT而且更难看
SQLCLR创建我自己的ENDSWITH,它可以很快
可能有更好的方法我不知道.你怎么看?