Я использую набор условий SQL LIKE, чтобы пройти по алфавиту и перечислить все элементы, начинающиеся с соответствующей буквы, например, чтобы получить все книги, название которых начинается с буквы «A»:
SELECT * FROM books WHERE title ILIKE "A%"
Это нормально для букв, но как мне перечислить все элементы, начинающиеся с любого числа? Для чего это стоит, это в базе данных Postgres.
sql
postgresql
Уэйн Коортс
источник
источник
PostgreSQL поддерживает сопоставление регулярных выражений .
Итак, ваш пример будет выглядеть так
SELECT * FROM books WHERE title ~ '^\d+ ?'
Это будет соответствовать заголовку, начинающемуся с одной или нескольких цифр и необязательного пробела.
источник
Если вы хотите искать как строку, вы можете преобразовать ее в текст следующим образом:
SELECT * FROM books WHERE price::TEXT LIKE '123%'
источник
Предполагая, что вы ищете «числа, начинающиеся с 7», а не «строки, начинающиеся с 7», возможно, что-то вроде
select * from books where convert(char(32), book_id) like '7%'
Или что бы там ни было, эквивалент convert в Postgres.
источник
Я опаздываю на вечеринку, но если вы имеете дело с целыми числами фиксированной длины, вы можете просто провести целочисленное сравнение:
SELECT * FROM books WHERE price > 89999 AND price < 90100;
источник
Проверено на PostgreSQL 9.5:
- только цифры
select * from books where title ~ '^[0-9]*$';
или же,
select * from books where title SIMILAR TO '[0-9]*';
- начать с цифры
select * from books where title ~ '^[0-9]+';
источник
Какой из них индексируется?
Это определенно индексируется btree:
Обратите внимание, что ":" идет после "9" в ASCII.
источник
В PostreSQL вы можете использовать оператор SIMILAR TO ( подробнее ):
-- only digits select * from books where title similar to '^[0-9]*$'; -- start with digit select * from books where title similar to '^[0-9]%$';
источник