Oracle或DM(达梦)时间戳之间的差值SQL迁移到瀚高数据库

文章目录

环境

系统平台:N/A

版本:5.6.5

文档用途

数据迁移的时候,两个时间戳之间间隔了总共多少分钟的SQL语法上不大一样。本文档主要讲述从Oracle或DM(达梦)数据库迁移到瀚高数据库中的语法变化。

详细信息

实例:

有一个表test,包含两个时间戳类型列:starttime和endtime。

这两列相减(starttime - endtime),不同的数据库得到的结果不同,以Oracle、DM(达梦)、瀚高数据库为例来说明。

目标:

得到starttime和endtime之间相差的分钟。

1)Oracle:

时间戳相减实例:

sql 复制代码
SELECT (TIMESTAMP '2007-07-15 19:00:00'- TIMESTAMP '2007-01-15 10:00:00') FROM DUAL;

结果:+181 09:00:00.000000(时间间隔类型)

由于Oracle时间戳相减得到的是时间间隔类型,所以不能直接将这个结果去乘以24*60,得到的结果不准确。

而DATE类型相减可以得到间隔天数,通过CAST函数将时间戳转换成日期格式,如:

sql 复制代码
SELECT ( cast(TIMESTAMP '2007-07-15 19:00:00' as date) - cast((TIMESTAMP '2007-01-15 10:00:00') as date )) FROM DUAL;

结果:181.375

这个数值就可以乘以24*60得到分钟数了。

2)DM(达梦):

时间戳相减实例:

sql 复制代码
SELECT (TIMESTAMP '2007-07-15 19:00:00'- TIMESTAMP '2007-01-15 10:00:00') ;

结果:181.375(float类型)

注意:如果使用时间间隔限定符,得到的结果不一样(我们这里只看一下就行,不做深入讨论)

sql 复制代码
SELECT (TIMESTAMP '2007-07-15 19:00:00'- TIMESTAMP '2007-01-15 19:00:00') day;

结果:INTERVAL '000000181' DAY(9)

此时得到的是时间间隔类型,如果没有指定时间间隔限定符默认得到的是float类型

3)瀚高数据库:

时间戳相减实例:

sql 复制代码
SELECT (TIMESTAMP '2007-07-15 19:00:00'- TIMESTAMP '2007-01-15 10:00:00');

结果:181 days 09:00:00(时间间隔类型)

与Oracle相同,所以这种类型也不能用来计算,如果我们直接用来计算会得到这样的结果:

sql 复制代码
SELECT (TIMESTAMP '2007-07-15 19:00:00'- TIMESTAMP '2007-01-15 10:00:00')*24*60;

结果:260640 days 12960:00:00

这不是我们想要的结果!

函数EXTRACT可以从时间间隔类型中获取间隔的总秒数,如:

sql 复制代码
select EXTRACT( EPOCH FROM(TIMESTAMP '2007-07-15 19:00:00'- TIMESTAMP '2007-01-15 10:00:00'));

结果:15670800

我们可以这样获取间隔多少天:

select EXTRACT( EPOCH FROM(TIMESTAMP '2007-07-15 19:00:00'- TIMESTAMP '2007-01-15 10:00:00'))/60/60/24;

结果:181.375

总结:

在不同数据库下目标结果的兼容格式如下:

1、Oracle语句:SELECT ( cast( starttime as date ) - cast( endtime as date ) )2460 FROM test;

2、DM语句:SELECT ( starttime - endtime )2460 FROM test;

3、瀚高语句:SELECT EXTRACT( EPOCH FROM( starttime - endtime ) )/60 FROM test;

这三个SQL结果是相同的。

相关推荐
2603_965148115 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
ltl5 小时前
RocksDB 经典故障排查:L0、compaction 与 write stall
数据库
xfhuangfu6 小时前
Oracle中建立到CDB和PDB的连接
数据库·oracle·rpc
小小龙学IT6 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
NineData6 小时前
DTCC 2026 预告|NineData CEO& 创始人叶正盛:面向 AI Agent 的数据库 DevOps 与数据复制实践
数据库·人工智能·数据库开发·devops·ninedata·数据库技术·dtcc
J_bean7 小时前
MySQL 事务是否必须手动开启?
数据库·mysql·数据库事务·自动提交·手动提交
J_bean7 小时前
MySQL InnoDB 如何检测死锁、判定死锁、处理死锁
数据库·mysql·死锁·死锁检测·处理死锁·死锁判定
浪子明X8 小时前
从 MongoDB 文档到关系模型:构建可重跑、可对账的数据迁移流水线
数据库·mongodb·oracle
杜子不疼.8 小时前
国产数据库撑起固井软件自主化:金仓 × 中海油服「海恒 Cemsol」落地解析
数据库
隔窗听雨眠8 小时前
GBase 8s并发控制深度解析:封锁机制、隔离级别与死锁处理全攻略
服务器·数据库·oracle