sql >> Databáze >  >> RDS >> PostgreSQL

Vytvořte velké celé číslo z velkého konce uuid v PostgreSQL

Rychle a bez dynamického SQL

Přeneste prvních 16 hexadecimálních číslic UUID do textové reprezentace jako bitstring bit(64) a přeneste to do bigint . Viz:

Pohodlně nadbytečné hexadecimální číslice vpravo jsou zkráceny v přetypování na bit(64) automaticky – přesně to, co potřebujeme.

Postgres přijímá různé formáty pro vstup. Váš daný řetězcový literál je jedním z nich:

14607158d3b14ac0b0d82a9a5a9e8f6e

Výchozí textová reprezentace UUID (a text výstup v Postgresu pro datový typ uuid ) přidává pomlčky na předdefinovaná místa:

14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e

Příručka:

Pokud se vstupní formát může lišit, pro jistotu nejprve odstraňte pomlčky:

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

Odesílat skutečné uuid zadejte pomocí uuid::text .

db<>fiddle zde

Všimněte si, že Postgres používá podepsané celé číslo, tedy bigint přetečení do záporných čísel v horní polovině – což by pro tento účel nemělo být relevantní.

Návrh DB

Pokud je to možné, přidejte bigserial sloupec do podkladové tabulky a místo toho ji použijte.



  1. Převod Mysqli na PDO

  2. Jak vybrat z názvu dynamické tabulky

  3. Jak se vyhnout konfliktním podmínkám při použití metody find_or_create DBIx::Class::ResultSet?

  4. Nejlepší způsob, jak hledat částečná slova ve velkém souboru dat MySQL