一、
http://zhouwf0726.itpub.net/post/9689/188126
我们都知道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 DEFAULT 0)
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;
二、自己验证的
1、执行SELECT CAST(sysdate AS TIMESTAMP) from dual;
2、如的到现在的时间为“24-11月-08 10.57.49.000000 下午”
3、以前的DB2字段中TIMESTAMP(6)时间格式为“2005-11-23 13:13:01.000003”,现转到Oracle10g应为“24-11月-08 10.57.49.000000 下午”
分享到:
相关推荐
`TIMESTAMP`类型的另一个优点是,它支持毫秒、微秒甚至纳秒级别的精度,具体取决于数据库的设置。这意味着在比较两个时间戳时,即使它们看起来完全相同,Oracle仍然能够区分出哪一个是先发生的,这是`DATE`类型所...
功能:将1970-01-01 00:00:00以来的毫秒数转换为对应的timestamp时间类型,精确保留毫秒级精度! 参数:I_MILLISECONDS NUMBER 待转换的毫秒数 示例:select MILLISECONDS2TIMESTAMP(1397457489296) from dual; ...
在Oracle数据库中,`TIMESTAMP`是一种用于存储日期和时间的数据类型,它可以精确到毫秒级别。`TIMESTAMP`数据类型不仅包含了日期和时间,还包含了时区信息,这对于处理全球性的业务非常重要。 #### 2. 创建表并插入...
在Oracle数据库中,`TIMESTAMP` 是一种用于存储日期和时间数据类型的字段,与传统的`DATE`类型相比,它的精度更高,能够精确到小数秒。`TIMESTAMP` 类型的精度可设置为 0 到 9 位,缺省情况下是 6 位,这意味着它...
在Oracle中,日期类型(DATE)默认精度到秒,而如果需要毫秒级别的精度,就需要使用TIMESTAMP类型。 `TO_DATE`函数可以将字符串转换为日期,但仅支持到秒级精度。为了计算毫秒,我们需要使用`TO_TIMESTAMP`函数,它...
Oracle 数据类型的使用和研究是早于计算机技术的出现的,使用不同的数据类型是为了保存和处理现实生活中不同性质信息的需要。例如统计人数可以用整型数据、计算有整有零的工资和利息使用浮点数、而要记录人的姓名就...
`TIMESTAMP`除了包含`DATE`类型的所有信息外,还可以存储毫秒级别的精度,并且支持时区信息。例如: ```sql CREATE TABLE orders ( order_date DATE, delivery_timestamp TIMESTAMP ); ``` #### 4.4 其他数据...
在Oracle数据库中,日期时间数据类型主要包括`DATE`、`TIMESTAMP`及其变体(如`TIMESTAMP WITH TIME ZONE`、`TIMESTAMP WITH LOCAL TIME ZONE`)以及`INTERVAL`数据类型。这些数据类型被广泛应用于记录日期、时间...
Oracle数据库中的`DATE`和`TIMESTAMP`是两种常见的日期和时间数据类型,它们在处理时间信息时有着不同的特性和用途。 首先,`DATE`数据类型是我们最常使用的,它可以存储日期和时间,包括世纪、年、月、日、小时、...
- `TIMESTAMP`:在Oracle 9i中引入,比`DATE`类型更精确,可以存储到毫秒级别的时间信息。 5. 二进制数据类型: - `BLOB`(Binary Large Object):用于存储二进制大数据,如图片、音频文件等,最大可达到4GB。...
- `TIMESTAMP(precision)`:精确到毫秒的日期时间,Oracle 9i后新增。 - **大数据类型**: - `BLOB`:存储大型二进制对象,最大4GB。 - `CLOB`:存储大型字符数据,最大4GB。 - `NCLOB`:存储Unicode字符数据,...
Oracle 数据库是一种广泛使用的数据库管理系统,它支持多种数据类型以满足不同业务场景的需求。数据类型的选择对于确保数据的准确存储和高效处理至关重要。本文将详细介绍 Oracle 中的一些常见数据类型及其特点,...
在实际的数据存储中,你可以使用`TIMESTAMP`数据类型来保存这种高精度的时间。例如,表`ct_cdr_comparison`中的`DATTCDRCOMPARISONGUID`字段就是`TIMESTAMP(9)`类型,可以存储带有9位小数的毫秒时间戳。如果在查询时...
- **描述**:日期和时间类型,用于存储精确到秒甚至毫秒级别的日期时间。 - **应用场景**:适用于需要高精度记录事件发生时间的场景。 5. **TIMESTAMP WITH TIME ZONE** 和 **TIMESTAMP WITH LOCAL TIME ZONE** ...
Oracle数据库支持多种日期时间数据类型,其中最常用的是`DATE`和`TIMESTAMP`。`DATE`类型用于存储日期和时间信息,包括年、月、日、时、分和秒(精确到秒)。`TIMESTAMP`则提供更精细的时间戳,支持毫秒级精度。 ##...
Oracle数据库中的DATE和TIMESTAMP是两种不同的数据类型,它们在存储日期和时间信息时有所区别。 1. DATE数据类型: DATE类型是最基础的日期时间数据类型,它可以存储日期(年、月、日)和时间(时、分、秒)。在...
// 使用 Timestamp 类型存储当前时间 Timestamp sqlTimestamp = new java.sql.Timestamp(time); // 如果需要自定义时间格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); ...
- `TIMESTAMP`:存储精确到毫秒的时间戳。 - **布尔数据类型**:仅有一种类型`BOOLEAN`,用于存储逻辑值`TRUE`、`FALSE`和`NULL`,但不支持直接存储到数据库表中。 - **LOB类型**:用于存储大型对象数据,如文本、...