我需要将字符串的结尾与存储过程中可能的结尾列表进行比较。会被叫很多,大概有10-15个候选结局。此时,仅使用代码的解决方案比创建专用于此的表更好。类似的东西:
IF (ENDSWITH(@var, 'foo') OR
ENDSWITH(@var, 'bar') OR
ENDSWITH(@var, 'badger') OR
ENDSWITH(@var, 'snake'))
(
)
我正在寻找速度和可维护性方面的最佳方法。我所知道的候选人是
-
是的,到目前为止我最喜欢的,但这意味着我必须对字符串长度进行硬编码,因此很容易出错。这也意味着多次切割源字符串。
IF ((LEN(@var) >= 3 AND RIGHT(@var, 3) = 'foo')) OR ...
-
喜欢,可能慢一点,但更干净一点
IF (@var LIKE '%foo') OR ...
CHARINDEX,很可能较慢,因为它搜索整个字符串
SUBSTRING,很可能相当于 RIGHT,而且更难看
SQLCLR 创建我自己的 ENDSWITH,它可以非常快
可能还有我不知道的更好的方法。你怎么认为?
针对 SQL 进行优化的最佳方法可能是存储REVERSE http://msdn.microsoft.com/en-us/library/ms180040.aspx索引的另一列中的字符串值,并使用 LEFT 或 LIKE 搜索该列的左侧。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)