Это должно дать Вам, что Вы хотите. Вы определенно захотите x объекты, разделенные на y объекты на страницу, проблема состоит в том, когда неровные числа подходят, поэтому если существует частичная страница, мы также хотим добавить одну страницу.
int x = number_of_items;
int y = items_per_page;
// with out library
int pages = x/y + (x % y > 0 ? 1 : 0)
// with library
int pages = (int)Math.Ceiling((double)x / (double)y);
Это выберет (с помощью регулярного выражения) каждую книгу, название которой начинается с номера, это то, что вы хотите?
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;
Какой из них индексируется?
Это определенно btree-indexable:
WHERE title >= '0' AND title < ':'
Обратите внимание, что ':' идет после '9' в ASCII.
PostgreSQL поддерживает сопоставление регулярных выражений .
Итак, ваш пример будет выглядеть так:
SELECT * FROM books WHERE title ~ '^\d+ ?'
Это будет соответствовать заголовку, начинающемуся с одной или нескольких цифр и необязательного пробела
Предполагая, что вы ищете «числа, начинающиеся с 7», а не «строки, начинающиеся с 7», возможно, что-то вроде
select * from books where convert(char(32), book_id) like '7%'
или что-то вроде того, что эквивалентно преобразованию Postgres. 1119516]