Можно ли определить, представляет ли строка числовые символы, за которыми следуют буквенные символы?
например «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.
В T-SQL это сделать не так-то просто; у него нет поддержки Regex, есть только повторное сопоставление с образцом. При этом вы можете добиться этого, проверив, что следующие «правила» верны:
Это дает что-то вроде следующего:
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]%'
Для простоты я использовал только заглавные буквы. При необходимости добавьте другие диапазоны символов. Могут существовать и другие, но неустановленные правила, например, может ли .
появляться более одного раза и допустимы ли пробелы. Это выражение необходимо расширить для более строгой фильтрации.