banner
NEWS LETTER

sql关于计算字符串类型的'时长'思路

  • Home
  • sql-question01
Scroll down

本篇是记录完成一段sql逻辑计算的思路

1.当前数据类型 TIMESTAMP

1
2
select TO_TIMESTAMP('20220428115810','yyyy/mm/dd hh24:mi:ss') PRI_TIME from dual;
结果:2022-04-28 11:58:10

2.若直接使用 TIMESTAMP 进行计算:

1). 两个 TIMESTAMP 数据类型 相减

1
2
select TO_TIMESTAMP('20220428115810','yyyy/mm/dd hh24:mi:ss') - TO_TIMESTAMP('20220428110010','yyyy/mm/dd hh24:mi:ss') from dual;
结果:0 0:58:0.0 (数据类型 INTERVALDS)

2). 先将 TIMESTAMP 类型 转换为 DATE 类型

1
2
3
4
5
6
select TO_TIMESTAMP('20220428115810','yyyy/mm/dd hh24:mi:ss')+0 from dual;
结果:2022-04-28 11:58:10 (数据类型 DATE)

再将 两个 DATE 数据类型 相减
select to_number((TO_TIMESTAMP('20220428115810','yyyy/mm/dd hh24:mi:ss')+0) - (TO_TIMESTAMP('20220428110010','yyyy/mm/dd hh24:mi:ss')+0))*24*60*60 from dual;
结果:3,480 (数据类型 NUMBER)

3.可以讲 步骤 (2) 中 结果作为存储值

 若需要展示出可使用:
1
2
3
SELECT floor(3480/3600)||to_char(to_date(mod(3480,3600),'sssss'),':mi:ss') FROM dual;
SELECT to_char(trunc(3480/3600),'FM9900')||':'||to_char(trunc(mod(3480,3600)/60),'FM00')||':'||to_char(mod(3480,60),'FM00') FROM dual;
结果:0:58:00 (数据类型 VARCHAR2)

请随意打赏

评论