Oracle 专题
专题目录
您的位置:database > Oracle专题 > Oracle Date类型
Oracle Date类型
作者:--    发布时间:2019-11-20

在本教程中将学习oracle date数据类型以及如何有效地处理日期和时间值。

oracle date数据类型简介

date数据类型允许以一秒的精度存储包括日期和时间的时间点值。
date数据类型存储年份(包括世纪),月份,日期,小时数,分钟数和秒数。 它的范围从公元前4712年1月1日到公元9999年12月31日(共同时代)。 默认情况下,如果未明确使用bce,则oracle使用ce日期条目。

oracle数据库有其自己的专用格式来存储日期数据。它使用7个字节的固定长度的字段,每个字段对应于世纪,年,月,日,时,分和秒来存储日期数据。

1. oracle日期格式

输入和输出的标准日期格式是dd-mon-yy,例如由nls_date_format参数的值表示为:
01-jan-17

以下语句显示了nls_date_format参数的当前值:

select
  value
from
  v$nls_parameters
where
  parameter = 'nls_date_format';

在oracle数据库系统中,nls_date_format的值是:

dd-mon-rr

以下语句通过使用sysdate函数以标准日期格式返回当前日期。

select
  sysdate
from
  dual;

执行上面查询语句,得到以下结果 -

假设想要将标准日期格式更改为yyyy-mm-dd,那么可以使用alter session语句来更改nls_date_format参数的值,如下所示:

alter session set nls_date_format = 'yyyy-mm-dd';

要验证更改,可以执行显示当前系统日期的语句:

2. 使用to_char()函数格式化日期

to_char()函数采用date值作为参数,根据指定的格式对其进行格式化,并返回一个日期字符串。

例如,要以特定的格式显示当前的系统日期,请按如下所示使用to_char()函数:

select
  to_char( sysdate, 'mm/dd/yyyy' )
from
  dual;

执行上面查询语句,得到以下结果 -

to_char()函数用于显示月份名称的语言由nls_date_language参数控制:

select
  value
from
  v$nls_parameters
where
  parameter = 'nls_date_language';

执行上面查询语句,得到以下结果 -

如果要将当前语言更改为另一个语言(例如french),请使用alter session语句:

alter session set nls_date_language = 'french';
-- alter session set nls_language='simplified chinese';

现在,可以再次执行to_char()函数来查看效果:

正如上面结果所看到的,这个月的名字已经从英文变成了法文。

3. 将字符串转换为日期

由于oracle使用内部格式来存储date数据,因此在将日期值存储到日期列之前,通常必须将字符串转换为日期值。
要转换不是标准格式的日期值,可以使用带有格式字符串的to_date()函数。

以下示例使用to_date()函数将字符串“august 01,2017”转换为相应的日期:

-- alter session set nls_language='simplified chinese';
select
  to_date('2018-10-21', 'yyyy-mm-dd' )
from
  dual;

执行上面查询语句,得到以下结果 -

2018-10-21

4. 日期文字

除了使用to_date()函数之外,还可以使用以下语法将日期值指定为字符串文字:

date 'yyyy-mm-dd'

请注意,要使用日期作为文字,必须使用公历。 以下示例显示2017年8月1日的ansi日期字面值:

date '2017-08-01'

ansi日期文字没有时间部分,必须采用确切格式('yyyy-mm-dd')。 如果要将时间数据包含在日期值中,则必须使用上面介绍的to_date()函数。

oracle date数据类型示例

以下语句创建一个名为my_events的表:

create table my_events (
    event_id number generated by default as identity,
    event_name varchar2 ( 255 ) not null,
    location varchar2 ( 255 ) not null,
    start_date date not null,
    end_date date not null,
    primary key ( event_id ) 
);

在这个表中,我们有两列date数据类型,分别是:start_dateend_date

要将新行插入到my_events表中,请使用以下语句:

insert into my_events
            (event_name,
             location,
             start_date,
             end_date)
values     ( 'teched europe',
        'barcelona, spain',
            date '2017-11-14',
            date '2017-11-16' );

在这个例子中,使用insert语句插入了两个日期文字。可以使用to_date()函数在插入之前将字符串转换为日期,如下例所示:

insert into my_events
            (event_name,
             location,
             start_date,
             end_date)
values     ( 'oracle openworld',
        'san francisco, ca, usa',
            to_date( '2017-10-01', 'yyyy-mm-dd' ),
            to_date( '2017-10-05', 'yyyy-mm-dd'));

我们再插入一行进行测试。

insert into my_events
                (event_name,
                 location,
                 start_date,
                 end_date)
    values     ( 'teched us',
            'las vegas, nv, usa',
                date '2017-09-25',
                date '2017-09-29' );

以下查询返回my_events表中的所有行:

select
  *
from
  my_events;

执行上面查询语句,得到以下结果 -

当然,也可以使用to_char()函数来格式化事件的日期:

select
  event_name,
  location,
  to_char(start_data, 'fmmonth dd, yyyy') start_date,
  to_char(end_data, 'fmmonth dd, yyyy') start_date,
from
  my_events;

执行上面查询语句,得到以下结果 -

在本教程中,您已经了解了oracle date数据类型以及如何有效处理date数据。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册