Моя задача - выбрать записи для следующей маски - SNNN000 Где:
- «N» - любой числовой символ;
- "S" - любой числовой или буквенный символ c (латиница);
- "0" - любой числовой или буквенный c символ (латинский), можно пропустить;
Вот что я получил - "[0-9A-Za-z] [0-9] [0-9] [0-9] [0-9A-Za-Z] [0-9A-Za-Z] [0-9A-Za-Z]». Возникла проблема с «0», как я могу сделать так, чтобы маска могла игнорировать условия для этого символа? Должны отображаться все записи, кроме 5-го (Id) из таблицы @table.
DECLARE @table TABLE (
id INT
,Txt NVARCHAR(100)
);
INSERT INTO @table (id, Txt)
VALUES (1, N'S123AB1')
,(2, N'S123')
,(3, N'S123A')
,(4, N'S123AB')
,(5, N'S123.@!');
SELECT *
FROM @table AS t
WHERE t.Txt LIKE N'[0-9A-Za-z][0-9][0-9][0-9][0-9A-Za-z][0-9A-Za-z][0-9A-Za-z]'
Я понимаю, что могу добавить условия через оператор OR. Но я хотел бы сделать это в одном выражении, и я мог бы сделать это в регулярных выражениях "[0-9A-Za-z] \ d {3} [0-9A-Za-z]? [0-9A-Za -z]? [0-9A-Za-Z]?». Насколько я понимаю, в SQL нет полных регулярных выражений, если я ошибаюсь, я был бы признателен за объяснение.
SELECT *
FROM @table AS t
WHERE t.Txt LIKE N'[0-9A-Za-z][0-9][0-9][0-9][0-9A-Za-z][0-9A-Za-z][0-9A-Za-z]'
OR t.Txt LIKE N'[0-9A-Za-z][0-9][0-9][0-9]';