PATINDEX неверный результат при поиске символа тире "-" - PullRequest
0 голосов
/ 24 мая 2018

В этом простом примере показана проблема, с которой я столкнулся, но я не понимаю, почему ...

Я проверяю местоположение первого символа в нижнем или верхнем регистре.буква, одиночная черта или точка в строковом параметре переданы мне.

Похоже, что эти два сопоставления с образцом проверяют одну и ту же вещь, и все же запустите этот код самостоятельно, и он напечатает 0, а затем 3:

PRINT PATINDEX ( '%[a-z,A-Z,-,.]%', '16-82') 
PRINT PATINDEX ( '%[-,a-z,A-Z,.]%', '16-82') 

Я не понимаю, почему это работает только , если черточка - первая, которую мы проверяем.

Это ошибка?Или работает, как задумано, и я что-то упустил ... Я использую SQL Server 2016, но я не думаю, что это имеет значение.

1 Ответ

0 голосов
/ 24 мая 2018

Тире в группе символов может играть любую из двух ролей:

  • Она может обозначать саму черту, как это происходит в выражении [-abc]
  • Можетобозначим оператор «все промежуточное», как это делается в выражении [a-z].

В вашем конкретном примере группа символов [a-z,A-Z,-,.] обозначает следующее:

  • Все от a до z
  • Запятая ,
  • Все от A до Z
  • Все от , до ,(т.е. снова запятая).
  • Точка .

На самом деле, вы, вероятно, хотели написать [-a-zA-Z.]

...