Мне нужно сравнить конец строк против списка возможных окончаний в сохраненной процедуре. Он будет называться много, и есть около 10-15 концов кандидата. На данный момент решение только для кода предпочтительнее для создания таблиц, посвященных этому. Что-то, что было бы похоже на:
IF (ENDSWITH(@var, 'foo') OR
ENDSWITH(@var, 'bar') OR
ENDSWITH(@var, 'badger') OR
ENDSWITH(@var, 'snake'))
(
)
Я ищу лучший способ с точки зрения скорости, но и ремонтопригодности. Кандидаты, которые я знаю, из
правильно, мой любимый до сих пор, но это означает, что я должен жесткокодировать длину строки, так что может быть склонна к ошибке. Это также значит сократить исходную строку много раз.
Если ((len (@var)> = 3 и справа (@var, 3) = 'foo')) или ...
Как, вероятно, наверное медленнее, но немного очистить
, если (@var вроде '% foo') или ...
CHARINDEX, скорее всего, медленнее, поскольку он ищет всю строку
подстроку, скорее всего, эквивалентную правильному и гораздо более уродливым
SQLCLR для создания моего собственного эндона, это может быть довольно быстро
способы я не знаю. Как вы думаете?