Hurtig og uden dynamisk SQL
Cast de førende 16 hex-cifre i en UUID i tekstrepræsentation som bitstreng bit(64)
og cast det til bigint
. Se:
Bekvemt er overskydende hex-cifre til højre afkortet i castet til bit(64)
automatisk - præcis hvad vi har brug for.
Postgres accepterer forskellige formater til input. Din givne streng er en af dem:
14607158d3b14ac0b0d82a9a5a9e8f6e
Standardtekstrepræsentationen af et UUID (og text
output i Postgres for datatypen uuid
) tilføjer bindestreger på foruddefinerede steder:
14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e
Hvis inputformatet kan variere, skal du først fjerne bindestreger for at være sikker:
SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;
Cast faktisk uuid
input med uuid::text
.
db<>fiddle her
Bemærk at Postgres bruger signeret heltal, så bigint
overløber til negative tal i den øverste halvdel - hvilket burde være irrelevant til dette formål.
DB-design
Hvis det overhovedet er muligt, tilføj en bigserial
kolonne til den underliggende tabel og brug den i stedet.