两个TIMESTAMP之差得到的是INTERVAL类型,而有时我们只需要得到两个时间相差的秒数,如果变成INTERVAL之后,想要获取这个值会非常麻烦。

比较常见的方法是使用EXTRACT来抽取获得的INTERVAL类型的日、时、分和秒来分别计算并求和:

SQL> create table t_timestamp (id number, t1 timestamp, t2 timestamp);

Table created.

SQL> insert into t_timestamp 
2 values (1, to_timestamp('20120603222324', 'yyyymmddhh24miss'), to_timestamp('20120526152354', 'yyyymmddhh24miss'));

1 row created.

SQL> commit;

Commit complete.

SQL> select t1 - t2 from t_timestamp where id = 1;

T1-T2
---------------------------------------------------------------------------
+000000008 06:59:30.000000

SQL> with t as (select t1 - t2 interval from t_timestamp where id = 1)
2 select extract(day from interval) * 86400
3 + extract(hour from interval) * 3600
4 + extract(minute from interval) * 60
5 + extract(second from interval) interval
6 from t;

INTERVAL
----------
716370

对于不需要考虑毫秒的情况而言,这种计算过于麻烦了,而对于DATE类型而言,计算差值非常方便,直接就可以返回两个日期相差的天数,在乘以86400就可以得到结果。

可惜的是,无论是ROUND还是TRUNC参数,都不支持TIMESTAMP类型:

SQL> select trunc(t1, 'ss') from t_timestamp where id = 1;
select trunc(t1, 'ss') from t_timestamp where id = 1
*
ERROR at line 1:
ORA-01899: bad precision specifier

SQL> select round(t1, 'ss') from t_timestamp where id = 1;
select round(t1, 'ss') from t_timestamp where id = 1
*
ERROR at line 1:
ORA-01899: bad precision specifier

其实对于这个问题,最简单的方法是利用隐式转换,变成DATE类型的操作:

SQL> select (t1 - 0 - (t2 - 0)) * 86400 from t_timestamp;

(T1-0-(T2-0))*86400
-------------------
716370

当然最标准的方法还是显示的转换:

SQL> select (cast(t1 as date) - cast(t2 as date)) * 86400 from t_timestamp;

(CAST(T1ASDATE)-CAST(T2ASDATE))*86400
-------------------------------------
716370

显然这种方便比利用EXTRACT要简单得多。

转载于:https://www.cnblogs.com/telwanggs/p/7762904.html

将TIMESTAMP类型的差值转化为秒的方法相关推荐

  1. MYSQL中TIMESTAMP类型的默认值

    MYSQL中TIMESTAMP类型的默认值    MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样. 1.自动UPDATE 和INSERT 到当前的时间: 表: ---------- ...

  2. mysql字段使用timestamp类型和默认值CURRENT_TIMESTAMP表示默认为时间,类似mssql的getdate()功能;字段自增...

    在mssql数据库中,时间字段如果想使用当前的时间,默认值是 getdate() 在mysql里面,如果是用 datetime类型,值用now() 是不允许的. 修改为   timestamp类型和默 ...

  3. mysql timestamp 默认值是什么#039;_MYSQL中TIMESTAMP类型的默认值

    MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样.1.自动UPDATE 和INSERT 到当前的时间:表:/*DDL Information For - test.t1*/----- ...

  4. 基于差值扩展的可逆水印方法

    1.将图像分成像素点对(x, y) x,y∈Z,0≤x,y≤255 个人认为,这个拆分过程需要专门记录,就是记录了图像中哪两个像素组成了这个像素对,这是为了能后续还原出水印. 2.定义其整数均值l 和 ...

  5. java字符类型的返回值,Java字符类isWhitespace()方法及示例

    Character 类isWhitespace()法isWhitespace()方法在java.lang包中可用. isWhitespace()方法用于检查给定的char值是否为空格,但是它包含空格中 ...

  6. Oracle数据库Timestamp数据差值计算Sql语句

    今天的工作中遇到一个问题,需要计算数据库中两个时间字段的差值,字段类型是timestamp,将字段直接相减,会得到timestamp类型的结果值,不是我想要的number类型的值.在网上找了一些方法, ...

  7. python怎么输入两个数然后求差值_python两个日期之间天差值获取

    因为我也刚刚接触python,这个原则上也是百度找到的,原来那位我也找不到了...... 主要就是使用datetime进行转化然后进行相减,获得如[diff_days] : 00:00:00形式的结果 ...

  8. 细说MySQL的时间戳(Timestamp)类型

    转载 生产环境中部署着各种版本的MySQL,包括MySQL 5.5/5.6/5.7三个大版本和N个小版本,由于MySQL在向上兼容性较差,导致相同SQL在不同版本上表现各异,下面从几个方面来详细介绍时 ...

  9. MySQL的时间戳(Timestamp)类型学习

    生产环境中部署着各种版本的MySQL,包括MySQL 5.5/5.6/5.7三个大版本和N个小版本.由于MySQL在向上兼容性较差,导致相同SQL在不同版本上表现各异,尤其是对于时间戳数据类型.下面从 ...

最新文章

  1. FreeMarker标签介绍
  2. 拆解交易系统--性能优化,安全加固与弹性扩缩容
  3. Unity3D手机斗地主游戏开发实战(03)_地主牌显示和出牌逻辑
  4. AndroidStudio项目打包成jar
  5. 你知道脑机接口中的“后门“攻击吗?它真的有可能在现实中实现
  6. python在哪写代码-python的代码写在哪里,怎么样运行python代码
  7. mysql游标循环的使用
  8. linux ubuntu文件浏览器如何显示隐藏文件?(快捷键ctrl+h)
  9. 手机长曝光怎么设置_摄影教程丨手机如何拍摄长曝光照片,流光快门,星空银河搞起来!...
  10. ubuntu20.10上搭建hadoop3.2.2伪分布式
  11. 一主多备几影响 oracle,Oracle 10g 一主多备的搭建技巧
  12. Qy词典-免费离线的中英词典
  13. 2021年,小傅哥の年终总结
  14. python有哪两种表现形式小练笔_写一篇不一样的爱400字:爱有两种表现形式小练笔400字...
  15. WPS怎样设置多级标题(如四级标题)
  16. 从0到1 用腾讯云低代码开发一个问卷小程序(基于模版中心二开)
  17. 远场(far-field)语音识别的主流技术有哪些
  18. 用matlab做谱分析程序,经典功率谱分析Matlab程序
  19. 任正非“互联网思维”如是说
  20. 传感网应用开发知识点总结

热门文章

  1. Java 并发编程 基础
  2. linux命令进入用户模式,linux怎么切换到root用户模式
  3. 基于FPGA实现DDS正弦波发生器
  4. (59)UART外设驱动用户接收模块(四)(第12天)
  5. (40)FPGA面试题Verilog实现可预置初值的循环计数器
  6. (3)verilog语言编写二分频
  7. 口译比赛用计算机,[079][连载]口译与生活:一枚计算机系在校生在口译路上的摸爬滚打(15)...
  8. lwip-1.4.1文档sys_arch翻译
  9. 使用LD链接时候文件的顺序
  10. 异步串行通讯和同步串行通讯对比