Ich verwende eine Reihe von SQL LIKE-Bedingungen, um das Alphabet durchzugehen und alle Elemente aufzulisten, die mit dem entsprechenden Buchstaben beginnen, z. B. um alle Bücher zu erhalten, deren Titel mit dem Buchstaben "A" beginnt:
SELECT * FROM books WHERE title ILIKE "A%"
Das ist gut für Briefe, aber wie liste ich alle Elemente auf, die mit einer beliebigen Nummer beginnen? Für das, was es wert ist, ist dies auf einer Postgres-Datenbank.
sql
postgresql
Wayne Koorts
quelle
quelle
PostgreSQL unterstützt den Abgleich regulärer Ausdrücke .
Ihr Beispiel würde also so aussehen
SELECT * FROM books WHERE title ~ '^\d+ ?'
Dies entspricht einem Titel, der mit einer oder mehreren Ziffern und einem optionalen Leerzeichen beginnt
quelle
Wenn Sie als Zeichenfolge suchen möchten, können Sie Text wie folgt umwandeln:
SELECT * FROM books WHERE price::TEXT LIKE '123%'
quelle
Ich bin zu spät zur Party hier, aber wenn Sie es mit Ganzzahlen fester Länge zu tun haben, können Sie einfach einen Ganzzahlvergleich durchführen:
SELECT * FROM books WHERE price > 89999 AND price < 90100;
quelle
Getestet auf PostgreSQL 9.5:
- nur Ziffern
select * from books where title ~ '^[0-9]*$';
oder,
select * from books where title SIMILAR TO '[0-9]*';
- Beginnen Sie mit der Ziffer
select * from books where title ~ '^[0-9]+';
quelle
Angenommen, Sie suchen nach "Zahlen, die mit 7 beginnen" anstatt nach "Zeichenfolgen, die mit 7 beginnen", vielleicht so etwas
select * from books where convert(char(32), book_id) like '7%'
Oder was auch immer das Postgres-Äquivalent von konvertieren ist.
quelle
Welches davon ist indexierbar?
Dieser ist definitiv btree-indexierbar:
Beachten Sie, dass ':' in ASCII nach '9' steht.
quelle
In PostreSQL können Sie den SIMILAR TO- Operator ( mehr ) verwenden:
-- only digits select * from books where title similar to '^[0-9]*$'; -- start with digit select * from books where title similar to '^[0-9]%$';
quelle