比较字符串的结尾,使用RIGHT,LIKE还是其他方法的最佳方法?
技术问答
191 人阅读
|
0 人回复
|
2023-09-14
|
我需要将字符串的结尾与存储过程中可能结束的列表进行比较。这将被称为大约10个-15个候选结局。在这一点上,仅代码解决方案比创建专门用于此的表更可取。会是这样的:
+ C% e7 u# O0 `8 q2 a! xIF (ENDSWITH(@var,'foo') OR ENDSWITH(@var,'bar') OR ENDSWITH(@var,'badger') OR ENDSWITH(@var,'snake'))()我正在寻找速度和可维护性的最佳方法。我认识的候选人是
# h" Y9 M% W% Y. d4 q$ o是的,到目前为止,我最喜欢的是,但这意味着我必须硬编码字符串的长度,所以很容易出错。这也意味着多次剪切源字符串。7 A7 L- j A: J$ v8 A
IF ((LEN(@var) >= 3 AND RIGHT(@var,3) = 'foo')) OR ...可能比较慢,但是比较干净/ X5 b( R& ]8 m
IF (@var LIKE '%foo') OR ...CHARINDEX,因为它搜索了整个字符串,它可能会很慢
. ^. d0 }- L T/ v' d9 y( y/ rSUBSTRING,很可能等同于RIGHT,而且丑得多, l& {6 h0 L5 p5 r
SQLCLR创造自己的ENDSWITH,它可能很快
$ ]5 r' z0 a- N. o我可能不知道还有更好的方法。你怎么想呢
; N2 U0 D& q7 u2 B+ h" {6 X 7 O( Z% ~/ E) h9 |5 u
解决方案:
0 M8 }% t9 F0 |9 E3 |1 V3 G 为SQL优化此功能的最佳方法可能是REVERSE字符串存储在另一个已建立索引的列中并使用LEFT或LIKE左侧搜索。 |
|
|
|
|
|