Значение двойных знаков процента (%%) в T-SQL PATINDEX - PullRequest
0 голосов
/ 08 сентября 2018

Я наткнулся на устаревшую часть T-SQL, которая использует PATINDEX, подобный следующему, для извлечения даты из текстового столбца:

CAST(SUBSTRING(MyText, PATINDEX('%%-[0-1][0-9]/[0-3][0-9]/[0-9][0-9]%%', DocumentHeaderText)+1, 8) AS DATE)

Я не вижу причину двойных знаков процента в начале и конце строки с подстановочными знаками, а из поиска в Google и просмотра документации PATINDEX это не похоже на двойной процент Знак делает больше, чем один знак процента.

Тем не менее, я был укушен раньше, поспешно «улучшая» унаследованный код, выясняя, каким трудным образом у первоначального автора была веская причина для того, что он сделал, и вынужден был изменить его обратно.

Итак, мой вопрос: есть ли разница между %% и % в строке шаблона для оператора T-SQL LIKE или PATINDEX? Могу ли я безопасно изменить код без изменения поведения на:

CAST(SUBSTRING(MyText, PATINDEX('%-[0-1][0-9]/[0-3][0-9]/[0-9][0-9]%', DocumentHeaderText)+1, 8) AS DATE)

1 Ответ

0 голосов
/ 08 сентября 2018

Официальная документация PATINDEX гласит:

рисунок
Символьное выражение, которое содержит последовательность, которая будет найдена. Подстановочные знаки могут быть использованы; однако символ % должен предшествовать и следовать шаблону (кроме случаев, когда вы ищете первый или последний символ)

Подстановочный знак % означает, как написано в официальной документации для LIKE:

любая строка из нуля или более символов.

Тот факт, что он может обозначать любое количество символов, включая ноль, означает, что %% полностью эквивалентен %, и его можно безопасно изменить.

Обратите внимание, что это не относится к любым другим групповым символам T-SQL - поскольку _ обозначает один символ, а также [] и [^].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...