创建示例表
/*B表列类型为VARCHAR*/
create table B(DATE1 VARCHAR(20),TIME1 VARCHAR(20),DATE2 VARCHAR(20),TIME2 VARCHAR(20));
insert into B VALUES('2021-01-01','09:12:12','2021-01-02','19:02:01');
insert into B VALUES('2021-01-02','12:12:12','2021-01-05','20:02:01');
insert into B VALUES('2021-01-02','11:12:12','2021-01-04','09:02:01');
insert into B VALUES('2021-01-03','15:12:12','2021-01-06','10:02:01');
insert into B VALUES('2021-01-03','15:12:12','2021-01-06','10:02:01');
insert into B VALUES('2021-01-04','15:00:12','2021-01-06','15:00:12');
insert into B VALUES('2021-01-06','09:00:12','2021-01-06','10:10:15');
COMMIT;
/*BB表列类型为DATETIME*/
create table bb (d1 DATETIME,d2 DATETIME);
insert into BB VALUES(TO_DATE('2021-01-01 09:12:12','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2021-01-02 19:02:01','yyyy-mm-dd hh24:mi:ss'));
insert into BB VALUES(TO_DATE('2021-01-02 12:12:12','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2021-01-05 20:02:01','yyyy-mm-dd hh24:mi:ss'));
insert into BB VALUES(TO_DATE('2021-01-02 11:12:12','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2021-01-04 09:02:01','yyyy-mm-dd hh24:mi:ss'));
insert into BB VALUES(TO_DATE('2021-01-03 15:12:12','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2021-01-06 19:02:01','yyyy-mm-dd hh24:mi:ss'));
insert into BB VALUES(TO_DATE('2021-01-06 09:00:12','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2021-01-06 10:02:01','yyyy-mm-dd hh24:mi:ss'));
insert into BB VALUES(TO_DATE('2021-01-04 15:00:12','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2021-01-06 15:02:01','yyyy-mm-dd hh24:mi:ss'));
COMMIT;
复制
计算两个日期时间间隔以"x天x时x分x秒"显示
使用EXTRACT函数,用法与Oracle基本一致。
这里使用到的语法:
SELECT EXTRACT(DAY FROM (DATE2 - DATE1) DAY TO SECOND) ,
EXTRACT(HOUR FROM (DATE2 - DATE1) DAY TO SECOND),
EXTRACT(MINUTE FROM (DATE2 - DATE1) DAY TO SECOND),
EXTRACT(SECOND FROM (DATE2 - DATE1) DAY TO SECOND)
FROM TABLE;
/*
DATE2、DATE1均为日期时间类型,如果数据类型为VARCHAR需要使用to_date等函数转成日期时间类型
DATE2-DATE1得到的是天数(带小数),需要DAY TO SECOND进行转换后才能识别
*/
复制
/*BB表查询*/
select extract(DAY FROM (D2-D1) DAY TO SECOND)||'天'||
extract(HOUR FROM (D2-D1) DAY TO SECOND)||'时'||
extract(MINUTE FROM (D2-D1) DAY TO SECOND)||'分'||
cast(extract(SECOND FROM (D2-D1) DAY TO SECOND)as int)||'秒' AS "时间间隔"
,BB.*
from BB;
/*B表查询*/
select extract(DAY FROM (TO_DATE(date2||time2,'YYYY-MM-DDHH24:MI:SS')-TO_DATE(date1||time1,'YYYY-MM-DDHH24:MI:SS')) DAY TO SECOND)||'天'||
extract(HOUR FROM (TO_DATE(date2||time2,'YYYY-MM-DDHH24:MI:SS')-TO_DATE(date1||time1,'YYYY-MM-DDHH24:MI:SS')) DAY TO SECOND)||'时'||
extract(MINUTE FROM (TO_DATE(date2||time2,'YYYY-MM-DDHH24:MI:SS')-TO_DATE(date1||time1,'YYYY-MM-DDHH24:MI:SS')) DAY TO SECOND)||'分'||
cast(extract(SECOND FROM (TO_DATE(date2||time2,'YYYY-MM-DDHH24:MI:SS')-TO_DATE(date1||time1,'YYYY-MM-DDHH24:MI:SS')) DAY TO SECOND)as int)||'秒' AS "时间间隔"
,B.*
from B;
---格式化显示
select
extract(DAY FROM (TO_DATE(date2
||time2, 'YYYY-MM-DDHH24:MI:SS')-TO_DATE(date1
||time1, 'YYYY-MM-DDHH24:MI:SS')) DAY TO SECOND)
||'天'
|| extract(HOUR FROM (TO_DATE(date2
||time2, 'YYYY-MM-DDHH24:MI:SS')-TO_DATE(date1
||time1, 'YYYY-MM-DDHH24:MI:SS')) DAY TO SECOND)
||'时'
|| extract(MINUTE FROM (TO_DATE(date2
||time2, 'YYYY-MM-DDHH24:MI:SS')-TO_DATE(date1
||time1, 'YYYY-MM-DDHH24:MI:SS')) DAY TO SECOND)
||'分'
|| cast(extract(SECOND FROM (TO_DATE(date2
||time2, 'YYYY-MM-DDHH24:MI:SS')-TO_DATE(date1
||time1, 'YYYY-MM-DDHH24:MI:SS')) DAY TO SECOND)as int)
||'秒' AS "时间间隔",
B.*
from
B;
复制
B表查询显示结果:
需要注意的是,达梦数据库中,EXTRACT函数对于SECOND之外的任何域,函数返回整数,对于SECOND返回小数。所以在最后获取秒的部分会存在小数,返回的类型为DOUBLE类型,DOUBLE类型与字符串拼接时会发生转换(转换为varchar),结果会显示为"4.9E1秒"这样的格式,而不"49秒"。所以需要使用cast将extract返回的值类型转为整数类型然后再拼接,这样会显示为"49秒"。而Oracle中返回的都是number,所以不需要使用cast进行类型转换。
不转换为int,查询结果如下:
计算两个日期时间相差多少秒
使用DATEDIFF函数,DATEDIFF函数的作用是返回两个指定日期时间的边界数。
语法:DATEDIFF(datepart,date1,date2),datepart可以是年、月、日、时、分、秒、毫秒等。
DATEDIFF函数的更多使用,具体使用可以参考《DM8 SQL语言使用手册》日期时间函数。
SELECT DATEDIFF(S,D1,D2)
as "时间间隔(秒)"
,* FROM BB;
SELECT DATEDIFF(S,TO_DATE(date1||time1,'YYYY-MM-DDHH24:MI:SS'),TO_DATE(date2||time2,'YYYY-MM-DDHH24:MI:SS'))
as "时间间隔(秒)"
,B.* FROM B;
或者
SELECT
DATEDIFF(S, date1||time1, date2||time2) as "时间间隔(秒)",
B.*
FROM
B;
复制
更多资讯可以上达梦技术社区了解:https://eco.dameng.com
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
相关阅读
2025年4月国产数据库大事记:4个千万级中标项目诞生!2024年达梦净利3.6亿、金仓净利8006.6万……
墨天轮编辑部
2091次阅读
2025-04-30 17:39:54
达梦数据发布上市后首份财报:2024年营收10.4亿、净利3.6亿,销售平均薪酬 101 万、研发 36 万
通讯员
388次阅读
2025-04-15 12:09:47
国产数据库图谱又上新|82篇精选内容全览达梦数据库
墨天轮编辑部
275次阅读
2025-04-23 12:04:21
国产数据库必修课已上新|达梦数据库,从入门到实战
墨天轮-雪宝君
209次阅读
2025-04-28 14:25:11
达梦中国数据库产业基地竣工,光谷崛起“数据之弧”
通讯员
161次阅读
2025-04-23 09:41:05
SQLark V3.4 更新 | 新增 PostgreSQL 数据库支持、SQL 常用代码段、表设计器体验升级,超多新功能等你来探索!
达梦产品与服务
140次阅读
2025-04-17 09:38:11
中国软件深度研究报告:打造操作系统、数据库央企龙头
通讯员
84次阅读
2025-04-21 12:20:29
一季度营收净利双增长,达梦数据加速构建数据库创新生态圈
通讯员
83次阅读
2025-05-06 09:43:28
深耕四十余载,达梦数据库的进阶之路
通讯员
77次阅读
2025-05-06 09:37:17
达梦数据库常用的61个脚本,速来下载!
青年数据库学习互助会
59次阅读
2025-04-16 10:33:52