Considerare di utilizzare il codice qui sotto. Digitare enum_buysell
include solo 2 valori: buy
e sell
. Ho bisogno di ottenere il valore opposto in alcuni casi, ma il codice sembra brutto, imho. C'è un modo per ottimizzarlo? Ho pensato di non usare affatto enum, ad es. rendilo invece booleano, ma questa idea non è perfetta in quanto rende i dati stessi meno ovvi.Postgres: come ottenere l'elemento successivo in un set enum?
6
A
risposta
3
Poiché non c'è alcuna funzione per ottenere il valore successivo di enum in PostgreSQL, è necessario definirlo manualmente.
create function next_buysell (e enum_buysell)
returns enum_buysell
as $$
begin
return (case when e='buy'::enum_buysell then 'sell'::enum_buysell
else 'buy'::enum_buysell
end);
end
$$ language plpgsql;
Ora, è possibile utilizzarlo in questo modo:
postgres=# select next_buysell('sell'::enum_buysell);
next_buysell
--------------
buy
(1 row)
postgres=# select next_buysell('buy'::enum_buysell);
next_buysell
--------------
sell
(1 row)
E la sua dichiarazione CASE
diventa: problema
case
when account_id_active = p_account_id then direction
when account_id_passive = p_account_id then next_buysell(direction)
end as direction
+0
grazie, sembra migliore, questo è certo, ma non c'è qualche svantaggio di prestazioni relativo all'esecuzione di un'altra funzione, che fondamentalmente fa la stessa cosa del codice inline stesso? Voglio dire, questi tipi casuali di cast da 'varchar' a' enum_buysell' sono ancora lì, sono davvero impossibili da evitare? –
Problemi correlati
- 1. Come utilizzare enum in un database Postgres in Rails 3?
- 2. lista Postgres ENUM tipo
- 3. Come ottenere l'elemento "successivo" in OrderedDict?
- 4. Come si inserisce un valore enum Postgres utilizzando Clojure JDBC?
- 5. Come mappare un set di tipi enum in Hibernate?
- 6. MySQL enum vs. set
- 7. Come ottenere un valore personalizzato enum?
- 8. C# Elenco ordinato: come ottenere l'elemento successivo?
- 9. Come ottenere l'elemento successivo usando solo JavaScript?
- 10. Come posso trovare elegantemente il valore successivo e precedente in un Enum Python?
- 11. Tentativo di mappare postgres enum in Hibernate/JPA pojo
- 12. Come ottenere un valore enum dalla stringa in C#?
- 13. Come ottenere gli elementi in un set in C++?
- 14. Impossibile ottenere Postgres ha iniziato
- 15. Come ottenere elementi casuali da un set in Swift?
- 16. Come ottenere protobuf enum come stringa?
- 17. Memorizzare un file in postgres usando node-postgres
- 18. Ottenere un elemento da un set Java
- 19. Ottenere un Enum da visualizzare sul lato client
- 20. Python: come consentire duplicati in un set?
- 21. Come ottenere un URL ALAsset da un set PHA?
- 22. Come utilizzare Spring per ottenere il valore di un Enum
- 23. Come ottenere la riga con timestamp massimo in postgres?
- 24. Come posso ottenere enum per contenere un trattino (-)?
- 25. Ottenere l'elemento successivo da un flusso Java 8
- 26. Come ottenere il numero di possibili oggetti di un Enum?
- 27. Come ottenere il valore numerico da Enum?
- 28. Passo in un enum come un parametro di metodo
- 29. Crea un intervallo in postgres
- 30. Voglio mettere in valigia un valore di enumerazione in un bundle e ottenere come enum
Logic: un enum è fondamentalmente * * non ordinata. – wildplasser
@wildplasser, fondamentalmente hai decisamente ragione, ma questo non è vero per Postgres, - dai un'occhiata a [docs: 8.7.2. Ordinamento] (http://www.postgresql.org/docs/9.4/static/datatype-enum.html) –