postgresql – Postgres:如何获取枚举集中的下一项?

postgresql – Postgres:如何获取枚举集中的下一项?,第1张

概述考虑使用下面的代码.类型enum_buysell仅包含2个值:买入和卖出.在某些情况下我需要得到相反的值,但代码看起来很难看,imho.有没有办法优化它?我想过根本不使用enum,例如把它改为布尔值,但这个想法并不完美,因为它使数据本身不那么明显. select datetime, case when account_id_active = p_account_id and di 考虑使用下面的代码.类型enum_buysell仅包含2个值:买入和卖出.在某些情况下我需要得到相反的值,但代码看起来很难看,imho.有没有办法优化它?我想过根本不使用enum,例如把它改为布尔值,但这个想法并不完美,因为它使数据本身不那么明显.
select  datetime,case    when account_ID_active  = p_account_ID and direction = 'buy'  then 'buy'::enum_buysell    when account_ID_active  = p_account_ID and direction = 'sell' then 'sell'::enum_buysell    when account_ID_passive = p_account_ID and direction = 'buy'  then 'sell'::enum_buysell    when account_ID_passive = p_account_ID and direction = 'sell' then 'buy'::enum_buysell  end as direction,price,volumefrom  dealswhere  account_ID_active  = p_account_ID or  account_ID_passive = p_account_IDorder by  datetime desclimit  10;
由于在Postgresql中没有获取枚举的下一个值的功能,您应该自己定义它.
create function next_buysell (e enum_buysell)returns enum_buysellas $$begin  return (case when e='buy'::enum_buysell then 'sell'::enum_buysell               else 'buy'::enum_buysell          end);end$$language plpgsql;

现在,您可以像这样使用它:

postgres=# select next_buysell('sell'::enum_buysell); next_buysell-------------- buy(1 row)postgres=# select next_buysell('buy'::enum_buysell); next_buysell-------------- sell(1 row)

并且您的CASE声明变为:

case  when account_ID_active  = p_account_ID then direction  when account_ID_passive = p_account_ID then next_buysell(direction)end as direction
总结

以上是内存溢出为你收集整理的postgresql – Postgres:如何获取枚举集中的下一项?全部内容,希望文章能够帮你解决postgresql – Postgres:如何获取枚举集中的下一项?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1181836.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存