PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Erstellen Sie eine große Ganzzahl aus dem großen Ende einer uuid in PostgreSQL

Schnell und ohne dynamisches SQL

Wandeln Sie die führenden 16 Hexadezimalziffern einer UUID in Textdarstellung als bitstring bit(64) und wandeln Sie das in bigint um . Siehe:

Praktischerweise werden überschüssige Hexadezimalziffern rechts abgeschnitten in der Umwandlung zu bit(64) automatisch - genau das, was wir brauchen.

Postgres akzeptiert verschiedene Eingabeformate. Ihr gegebenes String-Literal ist eines davon:

14607158d3b14ac0b0d82a9a5a9e8f6e

Die standardmäßige Textdarstellung einer UUID (und der text Ausgabe in Postgres für den Datentyp uuid ) fügt an vordefinierten Stellen Bindestriche hinzu:

14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e

Das Handbuch:

Wenn das Eingabeformat variieren kann, entfernen Sie zuerst die Bindestriche, um sicherzugehen:

SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;

Cast tatsächliche uuid Eingabe mit uuid::text .

db<>fiddle hier

Beachten Sie, dass Postgres signiert verwendet ganze Zahl, also bigint Überläufe zu negativen Zahlen in der oberen Hälfte - was für diesen Zweck irrelevant sein sollte.

DB-Design

Fügen Sie nach Möglichkeit eine bigserial -Spalte in die zugrunde liegende Tabelle und verwenden Sie stattdessen diese.