Проверка состояния с помощью функции LEFT - PullRequest
1 голос
/ 05 июля 2019

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

create table num_test
(
    numb int,
    names varchar(20)
);

insert into num_test values(123456,'ABC');
insert into num_test values(12345,'DCD');
insert into num_test values(1234567,'ECD');
insert into num_test values(123456789,'BCD');

У меня есть входное значение:

declare @num int = 123456

Я хочу найти left 6 или 5 целых чисел. Если совпадение с left 6, то left 5 следует игнорировать, иначе left 5 должно отображаться.

Итак, ожидаемый результат должен быть:

numb    names
-----------------
123456  ABC

Запрос:

declare @num int = 123456

SELECT * FROM num_test 
where numb = LEFT(@num,6) or numb = LEFT(@num,5)

1 Ответ

2 голосов
/ 05 июля 2019

Вы можете упорядочить результаты по длине numb и взять верхний:

SELECT   TOP 1 * 
FROM     num_test 
WHERE    numb IN (LEFT(@num,6), LEFT(@num,5))
ORDER BY LEN(numb) DESC
...