- 论坛徽章:
- 0
|
数据库中的时间(ORACLE)
ORACLE支持内部和外部两种数据类型,内部数据类型描述ORACLE按照什么格式把数据存储在数据库的表列中,外部数据类型描述如何把数据存储在SQL变量中。
ORACLE表示日期和时间的内部数据类型为:
名称:DATE
代码:12
描述:表示定长日期/时间值,7个字节
ORACLE表示日期和时间的外部数据类型为:
名称:DATE
代码:12
描述:表示定长日期/时间值,占用7个字节,自左至右存放世纪、年、月、日、小时、分和秒。
DATE外部数据类型说明:
字节 1 2 3 4 5 6 7
含义 世纪 年 月 日 小时 分 秒
日期相关的内外部数据类型转换:
内部外部:
可以将DATE内部数据类型转换到以下外部数据类型中:
VARCHAR2, STRING, LONG, VARCHAR, DATE, LONGVARCHAR, CHAR, CHARZ。
可以将以下内部数据类型转换到DATE外部数据类型中:
VARCHAR2, LONG, DATE, CHAR
(一般在实际操作中很少做此类直接转换)
外部内部:
可以将DATE外部数据类型转换到以下内部数据类型中:
VARCHAR2, LONG, DATE, CHAR
(一般在实际操作中很少做此类直接转换)
可以将以下外部数据类型转换到DATE内部数据类型中:
VARCHAR2, STRING, LONG, VARCHAR, DATE, LONGVARCHAR, CHAR, CHARZ。
具体转换细节和注意点,请查阅具体版本的数据库文档。
Oracle中提供以下的日期时间操作函数:
ADD_MONTHS,CURRENT_DATE,CURRENT_TIMESTAMP,DBTIMEZONE,
EXTRACT (datetime),FROM_TZ,LAST_DAY,LOCALTIMESTAMP,
MONTHS_BETWEEN,NEW_TIME,NEXT_DAY,NUMTODSINTERVAL,
NUMTOYMINTERVAL,ROUND (date),SESSIONTIMEZONE,
SYS_EXTRACT_UTC,SYSDATE,SYSTIMESTAMP,
TO_CHAR (datetime),TO_TIMESTAMP,TO_TIMESTAMP_TZ,
TO_DSINTERVAL,TO_YMINTERVAL,TRUNC (date),TZ_OFFSET
以上函数详细用法请参考ORACLE具体版本的数据库文档。
下面举几个小例子:
1.增加或减去月份
SQL> select to_char(add_months(to_date('199912','yyyymm'),2),'yyyymm') from dual;
TO_CHA
------
200002
SQL> select to_char(add_months(to_date('199912','yyyymm'),-2),'yyyymm') from dual;
TO_CHA
------
199910
2. 给出date2-date1的月份
SQL> select months_between('19-12月-1999','19-3月-1999') mon_between from dual;
MON_BETWEEN
-----------
9
SQL>selectmonths_between(to_date('2000.05.20','yyyy.mm.dd'),to_date('2005.05.20','yyyy.mm.dd')) mon_betw from dual;
MON_BETW
---------
-60
3. NEW_TIME(date,'this','that')
给出在this时区=other时区的日期和时间
SQL> select to_char(sysdate,'yyyy.mm.dd hh24:mi:ss') bj_time,to_char(new_time
2 (sysdate,'PDT','GMT'),'yyyy.mm.dd hh24:mi:ss') los_angles from dual;
BJ_TIME LOS_ANGLES
------------------- -------------------
2004.05.09 11:05:32 2004.05.09 18:05:32
4. 给出日期date和星期x之后计算下一个星期的日期
SQL> select next_day('18-5月-2001','星期五') next_day from dual;
NEXT_DAY
----------
25-5月 -01
5. 用来得到系统的当前日期
SQL> select to_char(sysdate,'dd-mm-yyyy day') from dual;
TO_CHAR(SYSDATE,'
-----------------
09-05-2004 星期日
trunc(date,fmt)按照给出的要求将日期截断,如果fmt='mi'表示保留分,截断秒
SQL> select to_char(trunc(sysdate,'hh'),'yyyy.mm.dd hh24:mi:ss') hh,
2 to_char(trunc(sysdate,'mi'),'yyyy.mm.dd hh24:mi:ss') hhmm from dual;
HH HHMM
------------------- -------------------
2004.05.09 11:00:00 2004.05.09 11:17:00
6. TO_CHAR(date,'format')
SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2004/05/09 21:14:41
要熟悉对格式的处理
7. TO_DATE(string,'format')
将字符串转化为ORACLE中的一个日期,要熟悉对格式的处理。 |
|