Возможно ли использовать предложение «Где» в SQL, чтобы отображать только поле, содержащее только буквы и цифры?

Я хочу иметь возможность выбирать только поле, где определенное поле содержит как буквы, так и цифры. например:

Select [field1], [field2] from [db1].[table1] where [field2] = *LETTERS AND NUMBERS* 

Я использую SQL Server 2005, также я сожалею о том, что не уверен на 100 процентов относительно типа данных поля, потому что он находится на связанном сервере и не доступен в течение минуты. Надеюсь, вы сможете помочь

🙂

LIKE сделает это. Это двойной отрицательный

 where [field2] NOT LIKE '%[^0-9a-z]%' 

В нем говорится:

  • %[^0-9a-z]% означает not (alphanumeric)
  • NOT LIKE '%[^0-9a-z]%' означает not(not(alphanumeric)) -> буквенно-цифровой

Редактировать:

Для всех номеров … "это работает"

 SELECT 'it works' WHERE '1234567' NOT LIKE '%[^0-9a-z]%' 

Все буквы

 SELECT 'it works' WHERE 'abcdefg' NOT LIKE '%[^0-9a-z]%' 

Содержит не буквенно-цифровые

 SELECT 'it works' WHERE 'abc_123' NOT LIKE '%[^0-9a-z]%' 

Изменить 2:

Это решение для

только буквенно-цифровая, любая смесь букв и цифр

Редактировать 3:

буквы, сопровождаемые номерами

 where [field2] NOT LIKE '%[^0-9a-z]%' AND [field2] LIKE '[az]%[0-9]' 

Редактировать:

Наконец, 2 буквы и до 3 чисел

 where [field2] LIKE '[az][az][0-9]' OR [field2] LIKE '[az][az][0-9][0-9]' OR [field2] LIKE '[az][az][0-9][0-9][0-9]' 

То, что вы хотели бы сделать, это совпадение регулярных выражений на основе SQL. Проверьте это: http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

Цитаты:

«Хотя T-SQL чрезвычайно эффективен для большинства процессов обработки данных, он мало поддерживает текстовый анализ или манипулирование. Попытка выполнить любой сложный текстовый анализ с использованием встроенных строковых функций приводит к массовым функциям и хранимым процедурам, которые трудно отлаживать и поддерживать ».

А также:

«Однако есть SQLCLR, пользовательская функция CLR (UDF), которая позволяет создавать эффективный и менее подверженный ошибкам набор функций с использованием Microsoft® .NET Framework».

Затем вы получите примеры кода. Разве это не Microsoft? : D

Если вам нужно, чтобы он содержал как цифры, так и буквы, а также никаких других символов, я думаю, вам нужно использовать 3 таких предложения. NOT LIKE , как сказал @gbn, затем 2 LIKE s, чтобы обеспечить отображение обоих классов символов:

 select * from (select '123' union all select 'abc' union all select 'a2') t(Field) where Field LIKE '%[0-9]%' and Field like '%[az]%' AND Field NOT LIKE '%[^0-9a-z]%' 

возвращает одну строку, с 'a2' .


Если это должны быть только буквы, за которыми следуют цифры, я думаю, что вы могли бы достичь этого, еще больше не понравившись, снова вдохновленным @gbn:

 NOT LIKE '%[0-9]%[az]%' 

Но он начинает выглядеть так, что регулярное выражение в CLR может быть предпочтительным.

Я считаю, что PATINDEX сделает трюк для вас. В приведенном ниже запросе проверяются символы не 0-9 и не az, возвращающие 0, если он не находит (т. Е. Только # и буквы)

 Select [field1], [field2] from [db1].[table1] where patindex('%[^0-9a-z]%', [field2]) = 0 
 Select [field1], [field2] from [db1].[table1] where [field2] REGEXP '^[0-9a-fA-F]*$' 
  • Условное где предложение?
  • SQL Server 2012 - Заявление о ситуации в разделе where
  • создайте динамический, где в sql SP
  • MS SQL Advanced Выберите, где что-то было заменено
  • Результат заказа с помощью оператора LIKE
  • T-SQL - хранимая процедура - "IF EXISTS" против "WHERE EXISTS"
  • Отображать текущие значения месяца на основе аббревиатуры (октябрь) SQL Server
  • Операторы SQL WHERE в операторах SELECT
  • Динамический, где в Sql Select Query
  • Недопустимая ошибка имени столбца в предложении WHERE, столбец, выбранный с CASE
  • Как сделать несколько изменений в таблице сразу в SQL Server
  • Давайте будем гением компьютера.