Выберите, где первая буква в диапазоне (PostgreSQL) - PullRequest
4 голосов
/ 11 ноября 2011

Я пытаюсь выбрать из таблицы, где первая буква слова находится в диапазоне (например, a-f)

Я пробовал с предложением where, как это:

ГДЕ нижняя (подстрока (заголовок от 1 до 1)) В Массиве ['a', 'k', 't']

в надежде, что я найду способ динамически генерировать диапазон ARRAY.

Выше не работает. Есть идеи, что я делаю не так?

Ответы [ 2 ]

8 голосов
/ 11 ноября 2011

Вы можете использовать ключевое слово SIMILAR TO .Следующее будет соответствовать всем заголовкам, которые начинаются с 'a', 'k' или 't'.

... WHERE lower(title) SIMILAR TO '(a|k|t)%'

Если вы хотите использовать диапазон, вы можете использовать нотацию []:

... WHERE lower(title) SIMILAR TO '[a-f]%'

ПРИМЕЧАНИЯ

  1. Символ % соответствует любому количеству символов, следующих за шаблоном.Например, второй пример шаблона будет соответствовать: «abc», «ab», «a», «far», «страх» и т. Д.

  2. Также важно отметитьчто ключевое слово SIMILAR TO доступно только для PostgreSQL и не является ANSI SQL.

  3. Наконец, lower(title) не требуется при использовании класса символов.Вы можете просто найти что-то вроде

    WHERE title SIMILAR TO '[a-fA-F]%'

5 голосов
/ 11 ноября 2011

IN не понимает массив справа, вы хотите = ANY:

WHERE lower(substring(title from 1 for 1)) = ANY (ARRAY['a', 'k', 't'])

Или вы можете использовать LIKE, SIMILAR TO или ~ (регулярное выражение POSIX) .

Дополнительные ссылки:

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