SQL, чтобы определить, является ли строка числовыми символами, за которыми следуют буквенные символы

Можно ли определить, представляет ли строка числовые символы, за которыми следуют буквенные символы?

например «123AB» допустимо, «4.5 CD» также допустимо, «CDE3» — нет. «4d9» недействительно.

declare @t table (my_string varchar(10))

insert @t 
select '1.23bc' union -- Valid
select '4 d' union -- Valid
select 'a1' -- Invalid

select 'my_magic_expression' 
from @t

Желаемый результат:

  • Да
  • Да
  • Нет

🤔 А знаете ли вы, что...
SQL поддерживает сортировку данных с использованием оператора ORDER BY.


81
2

Ответы:

Решено

В T-SQL это сделать не так-то просто; у него нет поддержки Regex, есть только повторное сопоставление с образцом. При этом вы можете добиться этого, проверив, что следующие «правила» верны:

  1. Строка начинается с цифры и заканчивается буквой.
  2. Строка содержит только цифры, буквы и пробелы.
  3. Единственные символы, которые появляются после первого нецифрового символа, — это буквы и пробелы.

Это дает что-то вроде следующего:

DECLARE @t table (MyString varchar(10));

INSERT INTO @t (MyString)
VALUES('123AB'),
      ('45 CD'),
      ('3CDE'),
      ('123bc'),
      ('4 d'),
      ('CDE3'),
      ('4d9'),
      ('a1');

SELECT CASE WHEN MyString LIKE '[0-9]%[A-z]'
             AND MyString NOT LIKE '%[^0-9 A-z]%'
             AND STUFF(MyString,1,PATINDEX('%[^0-9]',MyString),'') NOT LIKE '%[0-9]%' THEN 1 ELSE 0
       END,
       MyString
FROM @t;

Решение кода было написано до комментариев, которые обозначают, что допустимы не только цифры и буквы. Этот ответ основан на сообщении на момент написания ответа, которое, вероятно, теперь изменится.


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

    my_string     like '%[0-9]%[A-Z]%' -- outer wildcards might not be needed here
and my_string not like '%[A-Z]%[0-9]%'

Для простоты я использовал только заглавные буквы. При необходимости добавьте другие диапазоны символов. Могут существовать и другие, но неустановленные правила, например, может ли . появляться более одного раза и допустимы ли пробелы. Это выражение необходимо расширить для более строгой фильтрации.

https://dbfiddle.uk/woME8gI7