sql >> Database >  >> RDS >> PostgreSQL

Maak een groot geheel getal van het grote einde van een uuid in PostgreSQL

Snel en zonder dynamische SQL

Cast de eerste 16 hexadecimale cijfers van een UUID in tekstweergave als bitstring bit(64) en cast dat naar bigint . Zie:

Handig is dat overtollige hexadecimale cijfers aan de rechterkant worden afgekapt in de cast naar bit(64) automatisch - precies wat we nodig hebben.

Postgres accepteert verschillende invoerformaten. De door jou opgegeven letterlijke tekenreeks is er een van:

14607158d3b14ac0b0d82a9a5a9e8f6e

De standaard tekstweergave van een UUID (en de text uitvoer in Postgres voor gegevenstype uuid ) voegt koppeltekens toe op vooraf gedefinieerde plaatsen:

14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e

De handleiding:

Als het invoerformaat kan variëren, verwijder dan voor de zekerheid eerst de koppeltekens:

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

Actuele cast uuid invoer met uuid::text .

db<>fiddle hier

Merk op dat Postgres ondertekend . gebruikt geheel getal, dus de bigint loopt over naar negatieve getallen in de bovenste helft - wat voor dit doel niet relevant zou moeten zijn.

DB-ontwerp

Voeg indien mogelijk een bigserial kolom naar de onderliggende tabel en gebruik die in plaats daarvan.



  1. SQL-syntaxisfout - Haversine-formule

  2. De standaardtaal van een gebruiker vinden in SQL Server (T-SQL)

  3. Hoe te bestellen op maandnaam in PostgreSQL of Oracle

  4. mysql werkt niet voor IS NIET NULL