Postgresql条件式排序,有多种情况。

所以我在Postgresql plpgsql语言中,有一个工作顺序由,它看起来有点像这样。

....
order by (CASE WHEN _sortcol='col_1' and _sortdir='desc' THEN col_1 end) desc NULLS LAST,
         (CASE WHEN _sortcol='col_2' and _sortdir='desc' THEN col_2 end) desc NULLS LAST,
         (CASE WHEN _sortcol='col_3' and _sortdir='desc' THEN col_3 end) desc NULLS LAST,
         ......
         (CASE WHEN _sortcol='col_N' and _sortdir='asc' THEN col_N end) NULLS LAST,
         (CASE WHEN _sortcol='col_N1' and _sortdir='asc' THEN col_N1 end) NULLS LAST,

一切正常,但这个order by子句是一个巨大的混乱,而我有一个有很多列的大表。有没有什么地方可以改进和优化代码,让这段代码占用更小的视觉空间?

解决方案:

虽然动态SQL应该很少使用,但这种情况下性能可能会更好。

BEGIN
  ..
  EXECUTE format('SELECT .. ORDER BY %I %s', _sortcol, 
    CASE _sortdir WHEN 'desc' THEN 'desc'
                  WHEN 'asc' THEN 'asc'
                  ELSE 'asc' END);

当你使用动态SQL时,你必须考虑到每次都要防止SQL注入。每一个字符串参数都必须被转义或限制为安全值。

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何让我的Ionic Android应用实现在线和离线功能?

2022-9-13 13:45:32

未分类

Chart.js如何从json中插入值?

2022-9-13 13:45:34

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索