sql >> Database >  >> RDS >> PostgreSQL

Het verschil in volgorde van letterlijke opsommingen tussen PostgreSQL 9.0 en 9.1

Ik denk dat je de PostgreSQL-versie moet controleren en het gedrag op de juiste manier moet veranderen, of SQL moet gebruiken die de catalogus niet raakt om de volgorde te bepalen.

Een idee voor de laatste, gegeven dummy enum:

CREATE TYPE test_enum AS ENUM ('z','x','y');
ALTER TYPE test_enum ADD VALUE 'a' BEFORE 'x';

is om ORDER BY de cast van het enum-label naar waarden van het enum-type met behulp van het row_number vensterfunctie beschikbaar in 8.4 en nieuwer:

SELECT enumlabel, row_number() OVER (ORDER BY enumlabel::test_enum) AS sort_key
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype;

Hiermee krijgt u de labels geordend op een sorteersleutel. In oudere Pg-versies sorteert Pg gewoon op de oid van de enum-waarden, in nieuwere versies zal het de enumsortvolgorde gebruiken, maar u hoeft zich geen zorgen te maken, u heeft zojuist tegen PostgreSQL gezegd "sorteer deze in de juiste volgorde alstublieft".

Of als je ze gewoon nodig hebt in de volgorde die de server verwacht, schrijf dan:

SELECT enumlabel
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype
ORDER BY enumlabel::test_enum



  1. Kan ik een tabelvariabele doorlopen in T-SQL?

  2. Hoe getallen in de database op twee decimalen af ​​te ronden met behulp van een MySql-query

  3. Hoe het pad van een hiërarchietabel te krijgen

  4. MySQL-query in een lus versus het gebruik van een SQL-join