oracle的timestamp类型使用
来源:互联网 发布:淘宝客链接在线转换 编辑:程序博客网 时间:2024/05/16 05:10
我们都知道date和timestamp都是对日期和时间的表示,只是两种类型的精确度不同,前者精确到秒,后者精确到小数秒(fractional_seconds_precision),可以是 0 to 9,缺省是6。
但是对date类型的运算很简单,有很多函数可用来处理;而两个timestamp的差则是很直观地显示为多少天+多少小时+多少分钟+多少秒+多少小数秒,
SQL> create table test (T1 TIMESTAMP(6),
2 T2 TIMESTAMP(6));
表已创建。
SQL> insert into test values(
2 to_timestamp('2006-01-01 12:10:10.1','yyyy-mm-dd hh24:mi:ss.ff'),
3 to_timestamp('2006-01-01 12:20:10.2','yyyy-mm-dd hh24:mi:ss.ff'));
已创建 1 行。
SQL>
SQL> insert into test values(
2 to_timestamp('2006-01-01 12:10:10.1','yyyy-mm-dd hh24:mi:ss.ff'),
3 to_timestamp('2006-01-02 12:20:10.2','yyyy-mm-dd hh24:mi:ss.ff'));
已创建 1 行。
SQL>
SQL> insert into test values(
2 to_timestamp('2006-01-01 12:10:10.1','yyyy-mm-dd hh24:mi:ss.ff'),
3 to_timestamp('2006-01-02 13:40:20.2','yyyy-mm-dd hh24:mi:ss.ff'));
已创建 1 行。
SQL> commit;
提交完成。
SQL>
两个timestamp的差则是很直观地显示为多少天+多少小时+多少分钟+多少秒+多少小数秒:
SQL> select t2-t1 from test;
+000000000 00:10:00.100000
+000000001 00:10:00.100000
+000000001 01:30:10.100000
SQL>
但要简单地转化为某一个精度却比较麻烦,用类似date类型的处理方法是不行的。如转化为分:
SQL> select 1440*(t2-t1) from test;
+000000010 00:02:24.000000000
+000001450 00:02:24.000000000
+000001530 04:02:24.000000000
SQL>
发现结果根本不是原先想要的,而是在原先的“多少天+多少小时+多少分钟+多少秒+多少小数秒”的每一项都乘以1440再进行进制处理。
最容易理解的就是用substr将两个timestamp的差进行分割转化处理:
SQL> SELECT substr((t2-t1),instr((t2-t1),' ')+7,2) seconds,
2 substr((t2-t1),instr((t2-t1),' ')+4,2) minutes,
3 substr((t2-t1),instr((t2-t1),' ')+1,2) hours,
4 trunc(to_number(substr((t2-t1),1,instr(t2-t1,' ')))) days,
5 trunc(to_number(substr((t2-t1),1,instr(t2-t1,' ')))/7) weeks
6 FROM test;
SECO MINU HOUR DAYS WEEKS
---- ---- ---- ---------- ----------
00 10 00 0 0
00 10 00 1 0
10 30 01 1 0
或者利用自定义函数来实现将天数转换成“天时分秒”格式:
CREATE OR REPLACE FUNCTION F_DAYS2STR(P_DAYS IN NUMBER DEFAULT0)
RETURN VARCHAR2 IS
--Ver:1.0
--Created by xsb on 2005-05-26
--For: 将天数转换成天时分秒格式
DAYS NUMBER := NVL(P_DAYS, 0);
VD NUMBER; --天
VH NUMBER; --小时
VM NUMBER; --分
VS NUMBER; --秒
RESULT VARCHAR2(100);--返回值
BEGIN
VD := TRUNC(DAYS);
VH := TRUNC((DAYS - VD) * 24);
VM := TRUNC((DAYS - VD - VH / 24) *24 *60);
VS := TRUNC((DAYS - VD - VH / 24 - VM /24 /60) *24 *60 *60);
SELECT DECODE(VD, 0,'', VD ||'天') || DECODE(VH,0,'', VH ||'小时') ||DECODE(VM,0,'', VM ||'分') || DECODE(VS,0,'', VS ||'秒')INTO RESULT FROM DUAL;
RETURN(RESULT);
END;
SQL>
如果最后结果的精度要求不高时(在分或分以上时),就可以先将timestamp转化为date再结算,这样就简单多了:
SQL> select (to_date(to_char(t2,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'
)-to_date(to_char(t1,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24*60
2 from test;
10
1450
1530.16667
date转换为timestamp:
SELECT CAST(sysdate AS TIMESTAMP) from dual;
- oracle的timestamp类型使用
- oracle的timestamp类型使用
- oracle的timestamp类型使用 毫秒
- oracle的timestamp类型使用 插入
- oracle的timestamp类型使用 插入
- Oracle TIMESTAMP(3)类型使用
- oracle timestamp类型, 无效的月份
- Oracle TimeStamp类型精度丢失的问题
- oracle-timestamp类型处理
- oracle-timestamp类型处理
- Oracle中的TIMESTAMP类型
- oracle运用(一) oracle数据库使用 TIMESTAMP()类型查询数据
- MySql中的Timestamp类型字段的使用
- MYSQL中TIMESTAMP类型的使用
- mysql的timestamp类型使用注意
- Oracle中使用SQL插入语句对类型为Timestamp和Date的字段赋值
- oracle.sql.TIMESTAMP类型转成固定格式的date类型
- oracle timestamp类型和date类型的区别
- facebook网站框架技术
- 图片缩略图的实现,比较灵活[可直接使用]
- 数据库中的Date,DateTime和TimeStamp类型
- linux grep命令
- OGRE里如何实现碰撞检测
- oracle的timestamp类型使用
- IT人员流失问题
- 数组求和算法系列
- 配置IIS支持PHP,首先得安装PHP
- [小技巧]快速地知道BIOS跑了哪些DXE Module和顺序(AMI EFI)
- 几个排序算法的java实现
- hibernate save和persist的区别
- Android开发之fedora13下编译Android源码
- CDN详解