Condition SQL LIKE pour rechercher un nombre entier?

J’utilise un ensemble de conditions SQL LIKE pour parcourir l’alphabet et répertorier tous les éléments commençant par la lettre appropriée, par exemple pour obtenir tous les livres dont le titre commence par la lettre “A”:

SELECT * FROM books WHERE title ILIKE "A%" 

C’est bien pour les lettres, mais comment puis-je énumérer tous les articles en commençant par n’importe quel nombre? Pour ce que ça vaut, c’est sur une firebase database Postgres.

Cela va sélectionner (par une regex) chaque livre qui a un titre commençant par un chiffre, est-ce ce que vous voulez?

 SELECT * FROM books WHERE title ~ '^[0-9]' 

Si vous voulez des entiers qui commencent par des chiffres spécifiques, vous pouvez utiliser:

 SELECT * FROM books WHERE CAST(price AS TEXT) LIKE '123%' 

ou utilisez (si tous vos numéros ont le même nombre de chiffres (une contrainte serait alors utile))

 SELECT * FROM books WHERE price BETWEEN 123000 AND 123999; 

PostgreSQL prend en charge la correspondance des expressions régulières .

Donc, votre exemple ressemblerait

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

Cela correspondra à un titre commençant par un ou plusieurs chiffres et un espace optionnel

En supposant que vous recherchez “des nombres qui commencent par 7” plutôt que “des chaînes qui commencent par 7”, peut-être quelque chose comme

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

Ou quel que soit l’équivalent Postgres de convertir.

Je suis en retard à la fête ici, mais si vous avez affaire à des nombres entiers d’une longueur fixe, vous pouvez simplement faire une comparaison d’entiers:

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

Lequel de ceux-ci est indexable?

Celui-ci est définitivement indexable:

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

Notez que «:» vient après «9» en ASCII.

Dans PostreSQL, vous pouvez utiliser l’opérateur SIMILAR TO ( plus ):

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

Si vous souhaitez effectuer une recherche sous forme de chaîne, vous pouvez utiliser le texte suivant:

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