将TIMESTAMP类型的差值转化为秒的方法
两个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类型的差值转化为秒的方法相关推荐
- MYSQL中TIMESTAMP类型的默认值
MYSQL中TIMESTAMP类型的默认值 MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样. 1.自动UPDATE 和INSERT 到当前的时间: 表: ---------- ...
- mysql字段使用timestamp类型和默认值CURRENT_TIMESTAMP表示默认为时间,类似mssql的getdate()功能;字段自增...
在mssql数据库中,时间字段如果想使用当前的时间,默认值是 getdate() 在mysql里面,如果是用 datetime类型,值用now() 是不允许的. 修改为 timestamp类型和默 ...
- mysql timestamp 默认值是什么#039;_MYSQL中TIMESTAMP类型的默认值
MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样.1.自动UPDATE 和INSERT 到当前的时间:表:/*DDL Information For - test.t1*/----- ...
- 基于差值扩展的可逆水印方法
1.将图像分成像素点对(x, y) x,y∈Z,0≤x,y≤255 个人认为,这个拆分过程需要专门记录,就是记录了图像中哪两个像素组成了这个像素对,这是为了能后续还原出水印. 2.定义其整数均值l 和 ...
- java字符类型的返回值,Java字符类isWhitespace()方法及示例
Character 类isWhitespace()法isWhitespace()方法在java.lang包中可用. isWhitespace()方法用于检查给定的char值是否为空格,但是它包含空格中 ...
- Oracle数据库Timestamp数据差值计算Sql语句
今天的工作中遇到一个问题,需要计算数据库中两个时间字段的差值,字段类型是timestamp,将字段直接相减,会得到timestamp类型的结果值,不是我想要的number类型的值.在网上找了一些方法, ...
- python怎么输入两个数然后求差值_python两个日期之间天差值获取
因为我也刚刚接触python,这个原则上也是百度找到的,原来那位我也找不到了...... 主要就是使用datetime进行转化然后进行相减,获得如[diff_days] : 00:00:00形式的结果 ...
- 细说MySQL的时间戳(Timestamp)类型
转载 生产环境中部署着各种版本的MySQL,包括MySQL 5.5/5.6/5.7三个大版本和N个小版本,由于MySQL在向上兼容性较差,导致相同SQL在不同版本上表现各异,下面从几个方面来详细介绍时 ...
- MySQL的时间戳(Timestamp)类型学习
生产环境中部署着各种版本的MySQL,包括MySQL 5.5/5.6/5.7三个大版本和N个小版本.由于MySQL在向上兼容性较差,导致相同SQL在不同版本上表现各异,尤其是对于时间戳数据类型.下面从 ...
最新文章
- FreeMarker标签介绍
- 拆解交易系统--性能优化,安全加固与弹性扩缩容
- Unity3D手机斗地主游戏开发实战(03)_地主牌显示和出牌逻辑
- AndroidStudio项目打包成jar
- 你知道脑机接口中的“后门“攻击吗?它真的有可能在现实中实现
- python在哪写代码-python的代码写在哪里,怎么样运行python代码
- mysql游标循环的使用
- linux ubuntu文件浏览器如何显示隐藏文件?(快捷键ctrl+h)
- 手机长曝光怎么设置_摄影教程丨手机如何拍摄长曝光照片,流光快门,星空银河搞起来!...
- ubuntu20.10上搭建hadoop3.2.2伪分布式
- 一主多备几影响 oracle,Oracle 10g 一主多备的搭建技巧
- Qy词典-免费离线的中英词典
- 2021年,小傅哥の年终总结
- python有哪两种表现形式小练笔_写一篇不一样的爱400字:爱有两种表现形式小练笔400字...
- WPS怎样设置多级标题(如四级标题)
- 从0到1 用腾讯云低代码开发一个问卷小程序(基于模版中心二开)
- 远场(far-field)语音识别的主流技术有哪些
- 用matlab做谱分析程序,经典功率谱分析Matlab程序
- 任正非“互联网思维”如是说
- 传感网应用开发知识点总结
热门文章
- Java 并发编程 基础
- linux命令进入用户模式,linux怎么切换到root用户模式
- 基于FPGA实现DDS正弦波发生器
- (59)UART外设驱动用户接收模块(四)(第12天)
- (40)FPGA面试题Verilog实现可预置初值的循环计数器
- (3)verilog语言编写二分频
- 口译比赛用计算机,[079][连载]口译与生活:一枚计算机系在校生在口译路上的摸爬滚打(15)...
- lwip-1.4.1文档sys_arch翻译
- 使用LD链接时候文件的顺序
- 异步串行通讯和同步串行通讯对比