Подтвердить что ты не робот

SQL LIKE условие для проверки целого?

Я использую набор условий SQL LIKE для прохождения через алфавит и список всех элементов, начинающихся с соответствующей буквы, например. чтобы получить все книги, где название начинается с буквы "A":

SELECT * FROM books WHERE title ILIKE "A%"

Это хорошо для писем, но как мне перечислить все элементы, начиная с любого числа? Для чего это стоит в DB Postgres.

4b9b3361

Ответ 1

Что будет выбирать (по регулярному выражению) каждую книгу, которая имеет название, начинающееся с числа, это то, что вы хотите?

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;

Ответ 2

PostgreSQL поддерживает регулярные выражения, соответствующие.

Итак, ваш пример будет выглядеть как

SELECT * FROM books WHERE title ~ '^\d+ ?' 

Это будет соответствовать заголовку, начинающемуся с одной или нескольких цифр и необязательным пространством

Ответ 3

Предполагая, что вы ищете "числа, начинающиеся с 7", а не "строки, начинающиеся с 7", возможно, что-то вроде

select * from books where convert(char(32), book_id) like '7%'

Или независимо от эквивалента конверсии Postgres.

Ответ 4

Какой из индексов можно индексировать?

Это, безусловно, btree-indexable:

WHERE title >= '0' AND title < ':'

Обратите внимание, что ':' появляется после "9" в ASCII.

Ответ 5

В PostreSQL вы можете использовать оператор ПОДОБНЫЙ TO (больше):

-- only digits
select * from books where title similar to '^[0-9]*$';
-- start with digit
select * from books where title similar to '^[0-9]%$';

Ответ 6

Если вы хотите выполнить поиск в виде строки, вы можете использовать текст следующим образом:

SELECT * FROM books WHERE price::TEXT LIKE '123%'

Ответ 7

Я опаздываю на вечеринку здесь, но если вы имеете дело с целыми числами фиксированной длины, вы можете просто провести целочисленное сравнение:

SELECT * FROM books WHERE price > 89999 AND price < 90100;