Oracle 的Date类型面面观

   在 Oracle 的所有类型中,和日期时间有关的类型只有一个: Date,字面上看,是日期类型,其实它是包括时间的,确切的说应该是DateTime.我们从以下几方面来了解一下Date的相关知识:

第一.Date类型的组成
 不管你同意与否,Date类型总是包括时间的.如果没有指定时间,就默认为午夜12:00:00
  例如:
SQL> conn hr/hr
已连接。
SQL> create table t
  2  (d date)
  3  tablespace users;

表已创建。

SQL> insert into t values (to_date('2006-11-15','yyyy-mm-dd'));

已创建 1 行。

SQL> select * from t;

D
----------
15-11月-06
之所以显示成 "15-11月-06"这种格式,与Oracle的参数nls_date_format有关系,执行以下的命令:

SQL>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

会话已更改。

日期时间格式改变以后,再执行刚才的语句:

SQL> select * from t;

D
-------------------
2006-11-15 00:00:00


可以看出,日期中是含有时间的.并且是"00:00:00".


第二:Date 的长度
  Date从公元前4712年1月1日到公元4712年12月31日,所以不用担心日期会到期.

第三.Date 的格式化显示

 在不同的应用的地方,Date可能要求有不同的显示格式.

       如:yyyy年mm月dd日,还有先显示月日,再显示年的.


SQL>  select to_char(d, 'yyyy"年"mm"月"dd"日"') "日期" from t;

日期
--------------
2006年11月15日

第四:忽略Date中时间,主要用于日期的比较.
     Date中始终是含有时间的,但是有的时候,我们不需要时间,只需要日期,这时就需要忽略时间.
   
SQL> insert into t values (sysdate);

已创建 1 行。

SQL> select * from t;

D
-------------------
2006-11-15 00:00:00
2006-11-15 23:03:55

SQL> select trunc(d) from t;

TRUNC(D)
-------------------
2006-11-15 00:00:00
2006-11-15 00:00:00

不忽略时间时:
SQL> select * from t where d<=to_date('2006-11-15','yyyy-mm-dd');

D
-------------------
2006-11-15 00:00:00
忽略时间时:
SQL> select * from t where trunc(d)<=to_date('2006-11-15','yyyy-mm-dd');

D
-------------------
2006-11-15 00:00:00
2006-11-15 23:03:55

第五: Date相关的运算
    由于Date的特殊性,它只能做一部分的运算.
    如:只能做两个Date的减运算,一个Date和整形的加(减)运算.

SQL>  select (d-to_date('2006-11-15','yyyy-mm-dd'))*24 from t;

(D-TO_DATE('2006-11-15','YYYY-MM-DD'))*24
-----------------------------------------
                                        0
                               23.0652778
两日期相减后得到的结果单位是天.上面的结果已换算成小时.

SQL> select d+1 from t;

D+1
-------------------
2006-11-16 00:00:00
2006-11-16 23:03:55

SQL> select d+32 from t;

D+32
-------------------
2006-12-17 00:00:00
2006-12-17 23:03:55
加或减去一段时间后,会自动的换算到别的日期.

SQL> select d-46 from t;

D-46
-------------------
2006-09-30 00:00:00
2006-09-30 23:03:55

 

最后,
SQL> truncate table t;

表已截掉。
SQL> drop table t;

表已丢弃。 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值