You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Oracle中的指定SQL查询改写为适配PostgreSQL的版本?

Oracle SQL转PostgreSQL等效语句方案

原语句逻辑说明

原Oracle语句实现的是从MOVIES表中查询电影Isle of Dogs(犬之岛)的所有演员姓名,结果按照演员姓名的最后一个空格后的片段(通常为姓氏)升序排序。

原生PostgreSQL等效写法(无兼容扩展依赖)

推荐使用正则替换的简化写法,逻辑和原语句完全一致:

SELECT ACTOR_NAME
FROM MOVIES
WHERE MOVIE_NAME = 'Isle of Dogs'
ORDER BY REGEXP_REPLACE(ACTOR_NAME, '^.* ', '') ASC;

如果想要更贴近原Oracle的字符串截取逻辑,也可以用反向查找位置的写法:

SELECT ACTOR_NAME
FROM MOVIES
WHERE MOVIE_NAME = 'Isle of Dogs'
ORDER BY SUBSTR(ACTOR_NAME, LENGTH(ACTOR_NAME) - POSITION(' ' IN REVERSE(ACTOR_NAME)) + 2) ASC;

该写法和原Oracle逻辑完全对齐:先反向查找字符串中第一个空格的位置,换算得到原字符串中最后一个空格的位置,再从该位置的下一位开始截取字符串用于排序。

兼容扩展场景写法

如果你的PostgreSQL环境安装了Oracle兼容扩展(如oracle_fdw、oracle_compat),可直接使用接近原Oracle的写法即可运行:

SELECT ACTOR_NAME
FROM MOVIES
WHERE MOVIE_NAME = 'Isle of Dogs'
ORDER BY SUBSTR(ACTOR_NAME, INSTR(ACTOR_NAME, ' ', -1)+1) ASC;

内容的提问来源于stack exchange,提问作者mila123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:18:03