Эй мой первый вопрос на ТАК! Anywho...
Все еще относительно newb в SQL, таким образом, я думаю, что мог бы пропускать что-то здесь. Мой вопрос, у меня в настоящее время есть таблица, полная номеров телефона. Я хочу иметь запрос, где я ищу номера телефона, которые подобны списку, который я имею. Так, например, я хочу найти номера телефона, которые начинаются '555123', '555321', и '555987'. Я обычно знаю, если у Вас есть список чисел, Вы могли бы просто сделать запрос такой как
SELECT *
FROM phonenumbers
WHERE number in ('5551234567', '5559876543', .... );
Существует ли способ сделать это с подобным? Такой как
SELECT *
FROM phonenumbers
WHERE number in like ('555123%', '555321%', '555987%'); //I know this doesn't actually work
Вместо должны сделать это индивидуально
SELECT *
FROM phonenumbers
WHERE number like '555123%'
or number like '555321%'
or number like '555987%'; //Which does work but takes a long time
Или есть ли более легкое, чтобы сделать это, что я просто отсутствую? Я использую пост-ГРЭС, я не знаю, существуют ли какие-либо команды, это имеет, который выручил бы с этим. Спасибо!
Вы можете использовать SIMILAR TO
и разделять теги с помощью | pipe '555123%|555321%|555987%'
например:
SELECT *
FROM phonenumbers
WHERE number SIMILAR TO '555123%|555321%|555987%'
Я так не думаю, но вы могли бы присоединить phonenumbers
к таблице criteria
, содержащей значения, которые вы хотите сопоставить, т.е.
JOIN criteria ON phonenumbers.number LIKE criteria.phonenumbers
... вероятно, не стоит этого делать для небольшого количества условий, хотя
Предполагается, что все ваши числа не содержат букв, а ваши числа всегда являются «префиксами» (например: КАК '123%'
) :
SELECT number
FROM (
VALUES
('555123'),
('555321'),
('555000')
) prefixes (prefix)
JOIN phonenumbers
ON number >= prefix
AND number < prefix || 'a'
Это будет использовать индекс для телефонных номеров
, если таковые имеются, так что может быть быстрее.
Возможно, если ваши префиксы имеют одинаковую длину, тогда вы можете сделать где RIGHT (число) в ('123456', '234456', 'etc', 'etc')