sql >> Databasteknik >  >> RDS >> PostgreSQL

Skapa ett stort heltal från den stora änden av en uuid i PostgreSQL

Snabbt och utan dynamisk SQL

Kasta de inledande 16 hexadecimala siffrorna i ett UUID i textrepresentation som bitsträng bit(64) och casta det till bigint . Se:

Lämpligen är överskjutande hexadecimala siffror till höger trunkerade i casten till bit(64) automatiskt - precis vad vi behöver.

Postgres accepterar olika format för inmatning. Din givna sträng bokstavlig är en av dem:

14607158d3b14ac0b0d82a9a5a9e8f6e

Standardtextrepresentationen av ett UUID (och text). utdata i Postgres för datatyp uuid ) lägger till bindestreck på fördefinierade platser:

14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e

Manualen:

Om inmatningsformatet kan variera, ta bort bindestreck först för att vara säker:

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

Cast faktiska uuid in med uuid::text .

db<>fiol här

Observera att Postgres använder signerad heltal, så bigint svämmar över till negativa tal i den övre halvan - vilket borde vara irrelevant för detta ändamål.

DB-design

Om det alls är möjligt lägg till en bigserial kolumnen till den underliggande tabellen och använd den istället.



  1. SNMP OUTPUT OPTIONS - Hur får jag bara OID-svarsvärdet?

  2. kontrollera om det finns dubbletter av inmatningen kontra använd PDO errorInfo-resultat

  3. SQL Hjälp | Selectlistan för INSERT-satsen innehåller färre objekt än infogningslistan

  4. MYSQL Insert Submit Button PHP