首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle解码与Postgres的等效函数

Oracle解码与Postgres的等效函数
EN

Stack Overflow用户
提问于 2020-10-30 18:15:17
回答 2查看 1.6K关注 0票数 1

所以,我正在将数据库从oracle迁移到Postgres,这是我的错误:

代码语言:javascript
运行
复制
Caused by: org.postgresql.util.PSQLException: ERROR: function decode(unknown, unknown, integer, unknown, integer, unknown, integer, unknown, integer, unknown, integer) does not exist
  Hint: No function matches the given name and argument types. You might need to add explicit type casts.

下面是我的代码:

代码语言:javascript
运行
复制
sqlQuery.append(" order by ");
            sqlQuery.append(" decode('pts.process_status', 'PTSPS_INPROGRESS', 1, 'PTSPS_SUBMITTED', 2, ");
            sqlQuery.append("            'PTSPS_DRAFT', 3, 'PTSPS_REJECTED', 4, 'PTSPS_APPROVED', 5) ");

你有什么线索吗?

据我所知,有人说要用COALESCE替换decode函数,但我不知道它的语法是怎样的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-30 18:17:07

您可以使用标准的case表达式:

代码语言:javascript
运行
复制
order by case pts.process_status
    when 'PTSPS_INPROGRESS' then 1
    when 'PTSPS_SUBMITTED'  then 2
    when 'PTSPS_DRAFT'      then 3
    when 'PTSPS_REJECTED'   then 4
    when 'PTSPS_APPROVED'   then 5
end
票数 3
EN

Stack Overflow用户

发布于 2020-10-30 18:58:52

Postgres有一个使用数组的逻辑的简化形式:

代码语言:javascript
运行
复制
order by array_position(array['PTSPS_INPROGRESS', 'PTSPS_SUBMITTED', 'PTSPS_DRAFT', 'PTSPS_REJECTED', 'PTSPS_APPROVED'],
                        pts.process_status
                       )

我应该指出的是,GMB建议的CASE解决方案是标准的SQL,并且可以在Postgres和Oracle (以及几乎任何其他数据库)中工作,所以这只是一个捷径。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64606420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档