SQL Server 2008 R2: поиск ячеек длиннее указанного числа - PullRequest
0 голосов
/ 30 мая 2018

У меня есть следующая таблица с некоторыми записями.

TABLE :

CREATE TABLE TblPatterns
(
    ColPattern VARCHAR(20)
);

INSERT INTO TblPatterns VALUES('123A4567890'),
                              ('123B4567890'),
                              ('123A4567891'),
                              ('123A4567892'),
                              ('243C4567890'),
                              ('123A4567890'),
                              ('123'),
                              ('243'),
                              ('123'),
                              ('24'),
                              ('1');

Мне нужно написать запрос для точного соответствия для данного шаблона.

Данный шаблон похож на 1 к 10 или 11. Что мне нужно сделать, это проверить точное совпадение символа из LEFT.

Пример 1:

DECLARE @Pat int = 10

Ожидаемый результат:

ColPattern
---------------
123A4567890
123A4567891
123A4567892

Пример 2:

DECLARE @Pat int = 3

Ожидаемый результат:

ColPattern
---------------
123A4567890
123B4567890
123A4567891
123A4567892
123
243C4567890
243

Пример 3:

DECLARE @Pat int = 1

Ожидаемый результат:

ColPattern
---------------
123A4567890
123B4567890
123A4567891
123A4567892
243C4567890
123
243
24
1

My Try : 1

DECLARE @Pat int = 10

SELECT DISTINCT ColPattern 
FROM TblPatterns
WHERE substring(ColPattern,1,@Pat) IN 
(
    SELECT substring(ColPattern,1,@Pat)
    FROM TblPatterns
    GROUP BY substring(ColPattern,1,@Pat)
    HAVING COUNT(*) > 1
);

Но получаю неожиданностьрезультат:

ColPattern
------------
123
123A4567890
123A4567891
123A4567892

1 Ответ

0 голосов
/ 30 мая 2018

Вы должны использовать приведенную ниже логику, чтобы получить шаблоны, соответствующие определенной длине.

DECLARE @pat INT = 1
SELECT * from TblPatterns WHERE LEN(colPattern) >= @pat;

Я также поставил Ссылка на SQLFiddle

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