НРАВИТСЯ оператор как замена для RegEx - PullRequest
0 голосов
/ 18 марта 2020

Моя задача - выбрать записи для следующей маски - 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]';

Ответы [ 2 ]

2 голосов
/ 18 марта 2020

К сожалению, использование OR, вероятно, лучшее, что вы можете сделать, используя SQL Улучшенный оператор LIKE сервера:

SELECT * 
FROM @table AS t
WHERE
    t.Txt LIKE N'[0-9A-Za-z][0-9][0-9][0-9]' OR
    t.Txt LIKE N'[0-9A-Za-z][0-9][0-9][0-9][0-9A-Za-z]' OR
    t.Txt LIKE N'[0-9A-Za-z][0-9][0-9][0-9][0-9A-Za-z][0-9A-Za-z]' OR
    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]';
1 голос
/ 18 марта 2020

Самый простой способ, который я могу придумать:

SELECT t.*
FROM @table AS t
WHERE (t.Txt + 'AAA') LIKE '[0-9A-Za-z][0-9][0-9][0-9][0-9A-Za-z][0-9A-Za-z][0-9A-Za-z]%' AND
      LEN(t.Txt) BETWEEN 4 AND 7;

Это добавляет три дополнительных символа и проверяет, совпадают ли первые 7 символов. Затем он проверяет длину столбца.

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