Pgsql与Oracle语法差异(SQL迁移记录)

2023-11-09

oracle 数据库中没有limit关键字

LIMIT 1 替换为 rownum=1

select * from table where rownum=1;     // 输出1条
oracle 自增序列使用 sequence

PGSQL 自增序列可用 serial 自增序列 数据类型

--使用   
test_table_id_seq.NEXTVAL
create sequence test_table_id_seq
 increment by 1
 start with 1
 minvalue 1
 maxvalue 999999999999999999;

PGSQL

create table t_test1
(
  id      serial not null,
  name    varchar(32),
  p_order serial not null,
  data    varchar(32)
);```
oracle 条件语句on/where 中使用 case when
        FROM tableA  a
        LEFT JOIN tableB  b ON a.id = b.id AND
        --Oracle
        (CASE WHEN a.flag= '0' THEN a.code ELSE a.temp_code END)= b.code
        
        --PG
        (CASE WHEN d.stkex = '0' THEN a.code = b.bond_code ELSE a.stk_undl_code= b.bond_code END)

类型

registry.regkey_val::integer
 CAST(registry.regkey_val AS INTEGER)

函数替换 字符位置

pgsql “position”
oracle instr


"position"((( SELECT registry.regkey_val
 FROM registry
 WHERE registry.regkey_id = 'COLLATERALIZABLE_BOND_PARAM')),
 replace(mb.int_org , ' ', '')) = 0
                                        
                                                 
instr((( SELECT registry.regkey_val
FROM registry
WHERE registry.regkey_id = 'COLLATERALIZABLE_BOND_PARAM')),
replace(mb.int_org, ' ', '')) = 0                                                  

日期操作

        AND stk_calendar.physical_date >= (( SELECT to_char(date_trunc('month'::text, 'now'::text::date::timestamp with time zone) - '1 mon'::interval month, 'YYYYMMDD'::text)::integer AS to_char))
        AND stk_calendar.physical_date <= (( SELECT to_char(date_trunc('month'::text, 'now'::text::date::timestamp with time zone) - '1 day'::interval, 'YYYYMMDD'::text)::integer AS to_char))

时间函数

pgsql date_trunc
oracle TRUNC
pgsql   上月第一天、上月最后一天

AND stk_calendar.physical_date >= (( SELECT to_char(date_trunc('month'::text, 'now'::text::date::timestamp with time zone) - '1 mon'::interval month, 'YYYYMMDD'::text)::integer AS to_char)) 
AND stk_calendar.physical_date <= (( SELECT to_char(date_trunc('month'::text, 'now'::text::date::timestamp with time zone) - '1 day'::interval, 'YYYYMMDD'::text)::integer AS to_char))
        
        
oracle   上月第一天、上月最后一天
select CAST(to_char(trunc(add_months(sysdate,-1),'month'),'YYYYMMDD') AS INTEGER)  AS pre_month_first_date from dual
SELECT CAST(to_char(last_day(add_months(sysdate,-1)),'YYYYMMDD') AS INTEGER)AS pre_month_last_date FROM dual
上月第一天oracle

1.oracle 上月今日 月份函数add_months

SELECT add_months(sysdate,-1) FROM dual

2.本月第一天 日期函数trunc

select trunc(sysdate,'month') from dual;   //返回本月的第一天  oracle

3.上月第一天 (结合1、2即可)

select trunc(add_months(sysdate,-1),'month') from dual

--格式化,转出整形
select CAST(to_char(trunc(add_months(sysdate,-1),'month'),'YYYYMMDD') AS INTEGER)  AS pre_month_first_date from dual
上月最后一天Oracle

1.oracle 上月 同理

SELECT add_months(sysdate,-1) FROM dual

2.最后一天 last_day函数

SELECT last_day(sysdate) FROM dual

3.上月最后一天 结合1、2即可

SELECT last_day(add_months(sysdate,-1))FROM dual

--格式化,转出整形

SELECT CAST(to_char(last_day(add_months(sysdate,-1)),'YYYYMMDD') AS INTEGER)AS pre_month_last_date FROM dual

其他

select to_char(trunc(add_months(last_day(sysdate), -1) + 1), 'yyyy-mm-dd') from dual  // 本月第一天
select to_char(last_day(sysdate), 'yyyy-mm-dd') AS ENDDATE from dual    //  本月最后一天

上月第一天

--oracle
select CAST(to_char(trunc(add_months(sysdate,-1),'month'),'YYYYMMDD') AS INTEGER)  AS last_month_first_date from dual

select add_months(sysdate,-1) from dual;

--pgsql
SELECT to_char(date_trunc('month'::text, 'now'::text::date::timestamp with time zone) - '1 mon'::interval month, 'YYYYMMDD'::text)::integer AS to_char)


上月最后一天

--oracle



--pgsql
SELECT to_char(date_trunc('month'::text, 'now'::text::date::timestamp with time zone) - '1 day'::interval, 'YYYYMMDD'::text)::integer AS to_char



函数date_part,获取日期相差天数

ORACLE 日期相差天数(转日期类型相减 然后转整形)

select TO_NUMBER( TO_DATE(TO_CHAR(20180605),'YYYYMMDD') - TO_DATE(TO_CHAR(20180601),'YYYYMMDD')) from dual

select  abs(TO_NUMBER( TO_DATE(TO_CHAR( hbbc.bb_date),'YYYYMMDD') - TO_DATE(TO_CHAR(hbbc.trd_date),'YYYYMMDD'))) from dual

PGSQL

SELECT abs(date_part('day', hbbc.bb_date ::character varying::timestamp without time zone - hbbc.trd_date ::character varying::timestamp without time zone)) AS abs

(( SELECT abs(date_part('day'::text, bbc.bb_date ::character varying::timestamp without time zone - bbc.trd_date ::character varying::timestamp without time zone)) AS abs))

参考

--Oracle中两个日期相差天数--
select TO_NUMBER(TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))
AS 相差天数 from dual;


select TO_NUMBER(TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))

AS 相差天数 from dual;

2
(select TRUNC(t.finish_time) - TRUNC(t.start_time)) as 相隔天数 from table t

字符串分隔函数

pgsql regexp_split_to_table

Oracle实现split函数

oracle分割以逗号间隔得字符串

SELECT
	REGEXP_SUBSTR ('1,2,3',
	'[^,]+',
	1,
	rownum)
FROM
	dual
CONNECT BY
	rownum <= LENGTH ('1,2,3') - LENGTH (regexp_replace('1,2,3', ',', ''))+ 1;


第二种
 
SELECT DISTINCT REGEXP_SUBSTR ('1,2,3','[^,]+',1,LEVEL) as "test"
FROM  DUAL
CONNECT BY REGEXP_SUBSTR ('1,2,3','[^,]+',1,LEVEL) IS NOT NULL
order by 1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pgsql与Oracle语法差异(SQL迁移记录) 的相关文章

  • 执行 SELECT 或 INSERT

    我想写一些类似的东西CASE以我想要的方式在 PostgreSQL 中声明SELECT从表中 如果什么也没找到 我想INSERT改为放入表中 我的示例表allocated ideas看起来像这样 challenge id user id i
  • android-security :Google Play 警告:您的应用程序包含 SQL 注入问题

    作为我们应用程序的一部分 我们使用两个 contentProvider 但两者都受到 android exported false 的保护 但我们仍然收到一封 Google Play 警告邮件 您的应用程序包含 SQL 注入问题 他们提到的
  • 在仅具有两种类型值的列上创建索引有多有效

    我在列上创建了一个索引 该列只有两个可能的值 Y 和 N 两个值的数据类型相同 假设列名称是指示符 我写了一个选择语句 例如 SELECT INDICATOR FROM TEMP TABLE ORDER BY INDICATOR 当我在 S
  • MYSQL从另一个表插入id

    我有以下疑问 我有 2 张桌子 id customers 1 alan 2 beth 3 john and id id customers value 1 1 bar 2 1 foo 3 2 baz 示例 我需要在第二个表中添加值 alfa
  • 如何编写具有这种不寻常匹配标准的联接?

    我想要 左连接 一个表 以便值不仅连接到匹配行 而且还连接到任何后续的非匹配行 直到下一个匹配行 换句话说 我想用之前的非空值来填充空值 样本数据和期望结果 Table x id 1 2 3 4 5 Table y id val 1 a 4
  • 如何使用JSqlParser向sql添加where条件?

    我想用JSqlParser向sql添加where条件 例如 Before select from test table where a 1 group by c After select from test table where a 1
  • SQL - 每个级别都有记录的递归树层次结构

    尝试使用 SAS 据我所知 不支持WITH RECURSIVE 在 SQL 中创建经典的层次结构树 这是现有表中的简化数据结构 USER ID SUPERVISOR ID 因此 要构建层次结构 您只需递归连接 x 次即可获取您要查找的数据
  • 查找至少有 2 名员工的部门

    我需要做sql问题将显示至少有 2 人的所有部门 SELECT department name FROM department INNER JOIN employee ON department id employee department
  • 从 Oracle 获取包方法和参数

    我正在寻找 Oracle 查询来获取 Oracle 包 过程的所有参数 我知道有一个视图或表可以提供此功能 但我似乎不记得它是什么 注意 我并不是要从 user objects 获取包列表 而是要获取包 中每个过程的数据类型和参数名称 Th
  • 将 2 个不同表中的 2 个值相乘

    我正在尝试使用 SQL 将值 X 乘以值 Y 值 X 位于表 A 中 B 位于表 B 中 我找不到这个问题的答案 表交易 ID Transaction ID Total Amount 1 001 1200 2 002 1500 3 003
  • 匹配可能存在或可能不存在的组

    我的正则表达式需要解析一个如下所示的地址 BLOOKKOKATU 20 A 773 00810 HELSINKI SUOMI 1 2 3 4 第一组 第二组和第三组将始终存在于地址中 第 4 组可能不存在 我编写了一个正则表达式来帮助我获得
  • 如何从 SQL Server 2008 返回由共享公共父级的多个选择构成的 XML

    我尝试过使用 FOR XML PATH FOR XML EXPLICIT 和 FOR XML AUTO 但数据从未采用正确的层次结构构建 基本上 我有一张父表 客户 和 3 个子表 每个表都有一个 customerid 列 Customer
  • Laravel - LIKE 运算符来搜索加密值

    我正在尝试在 Laravel 应用程序中实现一个搜索模块 可以按名称过滤用户 为了保护用户 name 列行在数据库上加密 我面临的问题是下面的查询总是返回 0 结果 我在搜索数据库之前对搜索输入值进行加密 patients DB selec
  • Flutter sqflite 插入列表

    我正在尝试将列表插入到 flutter 中的 sql 数据库中 但我不知道该怎么做 有人可以帮助我吗 当我初始化 mi 数据库时 我有这个 Directory documentsDirectory await getApplicationD
  • 如何捕获 PL/SQL 块中的唯一约束错误?

    假设我有一个 Oracle PL SQL 块 它将一条记录插入表中 并且需要从唯一约束错误中恢复 如下所示 begin insert into some table some values exception when update som
  • Oracle SQL 查询日期格式

    我总是对 ORACLE SQL 查询中的日期格式感到困惑 并花几分钟时间去谷歌 有人可以向我解释当数据库表中有不同格式的日期时解决问题的最简单方法吗 例如 我有一个日期列为 ES DATE 保存的数据为 27 APR 12 11 52 48
  • 会员提供商使用还是不使用?

    我正在开发一个使用 Facebook 的网站 现在为了管理用户我想使用MembershipProvider并选择开发一个定制的会员提供商 我的问题是我的数据库架构与标准成员资格架构不匹配 并且提供的用于覆盖的函数采用与我预期不同的参数 例如
  • “已经有一个与此命令关联的打开的 DataReader,必须先将其关闭。”

    我正在开发需要连接到另一个数据库以获取一些数据的应用程序 为此 我决定使用 SqlConnection reader 等 我需要执行一些查询 例如首先我需要获取某个用户的卡 ID 之后我需要通过该卡 ID 获取一些数据 这是我的代码 reg
  • 将整数值从数据库列转换为Oracle中的文本

    我对数据库有一个要求 1 表ABC 列 check amount number number 18 4 这基本上包含例如支票金额 3000 50 支付给雇员 现在签发了一张支票 该支票包含数字和文本形式的 check amount 例如 支
  • 浏览多个字段的值并将它们插入到同一列中

    我正在尝试使用重复行为我的 oracle apex 应用程序创建一个功能 假设我有一个车辆表 CREATE TABLE vehicles brand VARCHAR2 50 model VARCHAR2 50 comment VARCHAR

随机推荐

  • HBuilderX集成Git教程,需要安装TortoiseGit依赖

    1 HBuilder安装git插件 需要提前安装好git客户端 略过 点击 工具 插件安装 此时还是不能提交代码的 右键选中我们需要的项目 点击 外部命令 Git插件 然后随便选择一个操作 会提示需要安装TortoiseGit 然后跳转到T
  • 归并排序【图解及模板】

    全文目录 归并排序的思想 操作原理 归并排序演示图 代码模板 总结 归并排序的思想 归并排序是建立在归并操作上的一种有效 稳定的排序算法 该算法是采用分治法 Divide and Conquer 的一个非常典型的应用 将已有序的子序列合并
  • keil5改工程名称_Keil5建立stm32工程

    一 准备工作 1 首先在项目名称下建立一个文件夹 作为存放程序的地方 2 在总文件夹下 依次建立User Driver List Output三个文件夹 作为存放main函数 驱动函数 编译和输出文件的子文件夹 二 建立工程 1 打开kei
  • GO 依赖注入

    依赖注入是软件工程中经常使用到的一种技术 它提供了一种控制反转的机制 把控制权利交给了调用方 调用方来决定使用哪些参数 哪些对象来进行具体的业务逻辑 依赖注入的本质其实是为了将组件的创建与其依赖的创建分离 实现原理 通过反射读取对象的依赖
  • elementUi使用自定义表格时给表头自定义成el-input导致el-input失效的问题

    我们在使用elementUi的表格组件时往往需要自定义表格 很多还需要自定义表头 比如这种 我们再表格的头部插入el input组件 这时就会发现 你在表头的el input输入时不显示 解决方法就是给slot header 换成 head
  • 2023华为OD机试真题-对称字符串(JAVA、Python、C++)

    题目描述 对称就是最大的美学 现有一道关于对称字符串的美学 已知 第 1 个字符串 R 第 2 个字符串 BR 第 3 个字符串 RBBR 第 4 个字符串 BRRBRBBR 第 5 个字符串 RBBRBRRBBRRBRBBR 相信你已经发
  • Java中多线程,java栈和堆面试题

    public static void main String args 创建自定义线程对象 myThread mT new myThread 开启新线程 让新的线程执行程序 jvm调用线程中的run mT start 在main方法中执行
  • mediapipe face_mesh测试

    目录 onnx测试 tensorflow预测tflite代码 onnx测试 img path r D data val result 1212 test 1 2 02370 1 jpg img path r D data face 1212
  • Python的下载和安装教程

    今天学习python以及pycharm的下载和安装 参考了好几个博客 在此总结一下安装过程 注意 在这里说明一下 如果要用pycharm进行python的开发 是要分别下载pycharm和python的 不要只安装pycharm就结束了 一
  • 命令提示符的使用及运行Java程序

    常用的命令提示符 dir 列出当前目录下的文件以及文件夹 director md 创建目录 make director rd 删除目录 cd 进入指定目录 cd 退回到上一级目录 cd 退回到根目录 del 删除文件 del txt可以将所
  • c++11std::thread扩展

    最近 整理一下学习c 的文章 看到一篇文章 其中提到了thread local和std future 觉得这两东西很有趣 于是网上搜了一些资料 觉得很有帮助 希望可以对大家学习c 线程有所帮助 http www cnblogs com ha
  • 嵌入式设备文件系统构建——增加用户登录功能

    1 修改inittab文件 first run the system script file sysinit etc init d rcS 进入命令行 askfirst bin sh 添加执行登录验证 sysinit bin login c
  • 【毕设教程】随机森林算法

    文章目录 0 前言 1 什么是随机森林 2 随机森林构造流程 3 随机森林的优缺点 3 1 优点 3 2 缺点 3 3 随机森林算法实现 4 最后 0 前言 Hi 大家好 这里是丹成学长的毕设系列文章 对毕设有任何疑问都可以问学长哦 这两年
  • Firebug调试经验与技巧

    昨天网站出问题了1 为了调试cookie 特别找了关于firebug里面如何调试cookie的文章 觉得这篇不错 保留下来备份 Firebug调试经验与技巧 2009 03 13 15 22 16 转自 http blog sina com
  • redis,mysql,elasticsearch,hbase,hive对比区别,该如何选择

    几种数据库对比如下 redis mysql elasticsearch hbase hive 容量 容量扩展 低 中 大 海量 海量 查询时效性 极高 中等 较高 较高 低 查询灵活性 较差 非常好 较好 较差 非常好 写入速度 极快 中等
  • U3D通过按钮点击实现场景切换

    1 新建UI 选择button选项 新建button 2 file gt Build settings gt Add Open Scenes 把你当前场景添加进去 gt 把你想要切换的场景拖拽上去 3 新建一个空对象 挂载一个scenech
  • org.apache.http.ConnectionClosedException Premature end of Content-Length delimited message body

    最近生产环境报了这个系统异常 org apache http ConnectionClosedException Premature end of Content Length delimited message body expected
  • CANOE入门:DBC创建和编辑

    目录 dbc文件创建步骤 创建一个DBC数据库文件 创建网络节点Network nodes 创建Message 创建信号Signal 创建Signals用到的数值表Value Tables 将Value Tables关联到Signals 将
  • I/O error on GET request for "http://user-service/hi": user-service; nested exception is java.net.Un

    一 场景重现 最近闲暇时间打算系统学习下SpringCloud系统教程 毕竟最近微服务也挺火的 于是网上找了一个大牛的博客跟着一起学习 史上最简单的SpringCloud教程 一直跟着模仿构建SpringCloud一直也没出什么问题 直到在
  • Pgsql与Oracle语法差异(SQL迁移记录)

    oracle 数据库中没有limit关键字 LIMIT 1 替换为 rownum 1 select from table where rownum 1 输出1条 oracle 自增序列使用 sequence PGSQL 自增序列可用 ser