Лучший способ сравнить конец строки, использовать право, например или другое?

Мне нужно сравнить конец строк против списка возможных окончаний в сохраненной процедуре. Он будет называться много, и есть около 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 для создания моего собственного эндона, это может быть довольно быстро

способы я не знаю. Как вы думаете?

10
задан abatishchev 9 December 2014 в 17:56
поделиться