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