Я наткнулся на устаревшую часть 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)