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

Opret stort heltal fra den store ende af en uuid i PostgreSQL

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

Manualen:

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.



  1. MySQL:Find manglende datoer mellem et datointerval

  2. Tilføj IIS 7 AppPool-identiteter som SQL Server-logoner

  3. Skinner bestilles efter foreningsfelt

  4. MySQL hvordan får man værdi til at udløbe?