PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Crea un intero grande dall'estremità grande di un uuid in PostgreSQL

Veloce e senza SQL dinamico

Trasmetti le 16 cifre esadecimali iniziali di un UUID nella rappresentazione testuale come bitstring bit(64) e lancialo su bigint . Vedi:

Convenientemente, le cifre esadecimali in eccesso a destra vengono troncate nel cast su bit(64) automaticamente - esattamente ciò di cui abbiamo bisogno.

Postgres accetta vari formati per l'input. La tua stringa letterale data è una di queste:

14607158d3b14ac0b0d82a9a5a9e8f6e

La rappresentazione testuale predefinita di un UUID (e il text output in Postgres per il tipo di dati uuid ) aggiunge trattini in posizioni predefinite:

14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e

Il manuale:

Se il formato di input può variare, elimina prima i trattini per essere sicuro:

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

Trasmetti uuid inserisci con uuid::text .

db<>violino qui

Tieni presente che Postgres utilizza firmato intero, quindi bigint overflow in numeri negativi nella metà superiore, il che dovrebbe essere irrilevante per questo scopo.

Progettazione DB

Se possibile, aggiungi un bigserial colonna alla tabella sottostante e usala al suo posto.