Использование SELECT для получения в SQL Server только полей с буквенно-цифровыми данными (и определенными знаками препинания) - PullRequest
7 голосов
/ 05 января 2012

Я пытаюсь отфильтровать некоторые данные сервера SQL и требовать результаты со следующими условиями:

  • где поле содержит буквенно-цифровые символы, без учета регистра
  • где поле имеет определенную пунктуацию (апостроф и дефис)
  • где поле не имеет пробелов

Есть ли эффективный способ сделать это с помощью CHAR в SQL Server или у кого-нибудь есть лучшее решение?

Ответы [ 2 ]

15 голосов
/ 05 января 2012

Используется двойной минус для фильтрации только по желаемому диапазону символов

Любой символ за пределами желаемого диапазона дает значение true из LIKE.Если строка состоит только из символа в желаемом диапазоне, LIKE выдает false.Тогда еще один НЕ

WHERE
   SomeCol NOT LIKE '%[^a-z0-9-'']%'

Примечание: здесь я использовал одинарную кавычку

По умолчанию SQL Server не учитывает регистр.При необходимости добавьте предложение COLLATE

   SomeCol COLLATE Latin1_General_CI_AS NOT LIKE '%[^a-z0-9-']%'

или измените диапазон

   SomeCol NOT LIKE '%[^a-zA-Z0-9-']%'

или, если вы хотите включить ä = a

   SomeCol COLLATE Latin1_General_CI_AI NOT LIKE '%[^a-z0-9-']%'
0 голосов
/ 30 мая 2018

RegExps согласно @ak, но с использованием PATINDEX и тестированием с временной таблицей.

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