您的位置:首页 > 数据库 > Oracle

oracle_查询date只显示日期不显示时间

2012-04-23 19:20 337 查看
向oracle数据库插入时间,其中时间是00:00:00 为甚么插入后在数据库只显示日期不显示时间?

推荐答案2011-11-15 18:19

显示时间需要将日期型列转换成字符型,使用to_char(日期, 'yyyy-mm-dd hh24:mi:ss')或者修改oracle缺省日期格式。

追问

我是说在数据库里面,在PL/SQL里查询结果只有日期没有时间,但是现在要在数据表中显示时间。

回答

oracle是没有datetime这个数据类型的,只有date数据类型date包含时间,但是查询时是不显示时间的(事实上数据库中是存时间的),

想要看到时间需要用to_char进行转换,或者更改oracle缺省的日期格式。

很简单,用to_char()函数即可

获取日期: to_char(sysdate, 'yyyy-mm-dd');

获取时间: to_char(sysdate, 'hh24:mi:ss');

to_date('2012-02-10 00:00:00','yyyy-mm-dd hh24:mi:ss')

oracle date类型默认只显示日期,不显示时间

//http://www.itkee.com/database/detail-4b.html

工作中要用到 Oracle 10g,经常要向其中的某张表插入事件发生的日期及时间。专门就 Oracle 的日期及时间显示方式和插入方式记一笔。

像 Number,varchar2 等内置的数据类型一样,Oracle 用 Date 这个内置的数据类型来存储日期和时间。和 MS SQL Server 一样,日期和时间是存储在一个数据类型里的,没有只存储时间或只存储日期的单独的时间和日期数据类型。DATE 数据类型存储年月日和时分秒。

当显示 DATE 类型的数据时,Oracle 先要把存储的值从内部保存格式转化为可输出的字符串。通常,这种转换是通过 TO_CHAR 这个函数来完成的。如果没有用 TO_CHAR 函数来指定特定的日期时间格式,Oracle 默认的显示格式是“DD-MON-YY”。

例如,我们创建了一个表 x:

create table abc(a int, b date);

然后我们执行下面的查询语句:

select b from abc;

我们会看到如下结果(set head on):

B

------------

01-APR-09

(语言是英语) 或 B

-------------

01-四月 -09

(语言是中文)

也就是说,每次显示 DATE 类型的数值时,Oracle 会自动调用 TO_CHAR 函数,并以默认日期显示格式为参数。我们可以显式地调用 TO_CHAR 函数,并指定自己想要的格式。例如:

SELECT TO_CHAR(b, 'YYYY/MM/DD') AS b FROM abc;

返回的结果是:

B

------------

2010/09/01

TO_CHAR 是个很强大的函数,可以把 Date,MLSLABEL,Number 类型的数据按指定的格式转换为 VARCHAR2 类型的数据,我们在这里只关心日期时间的转换。语法:

TO_CHAR(d [, fmt [, 'nlsparams'] ])

d 是 Date 类型的变量,fmt 是我们指定的日期时间格式,如果不显式指定就用 Oracle 的默认值。 fmt 里常用的跟日期时间有关的占位符如下:

MM 用数字表示的月份(例如,07)

MON 缩写的月份名称(例如,JUL)

MONTH 完整的月份名称(例如,JULY)

DD 日期(例如, 24)

DY 星期几的缩写(例如,FRI)

YYYY 用4位表示的年份(例如, 2008)

YY 用2位表示的年份,取年份的后两位(例如,08)

RR 跟 YY 类似,但两位表示的年份被近似到 1950 到 2049 这个范围里的年份,例如 06 被认为是 2006,而不是 1906

AM (或 PM) 上下午指示符

HH 12进制表示的时间(1-12)

HH24 24进制表示的时间(0-23)

MI 分钟(0-59)

SS 秒(0-59)

以上讲的是利用 TO_CHAR 函数来显示 DATE 类型的数据,下面讲讲如何向表里插入一个 Date 类型的数值。这时我们要用到 TO_DATE 这个函数,把字符串表示的日期转换为 Date 类型。

跟 Oracle 显示日期时间时会隐性调用 TO_CHAR 函数一样,当 Oracle 期望一个 Date 类型的值时,它会隐性调用 TO_DATE 函数来转换输入的字符串,依据的默认格式是“DD-MON-YY”。

还是以我们的 x 表为例,我们可以直接输入:

insert into abc values(99, '31-may-08');

但是,在显示时不管用什么格式都不会影响我们实际储存的数据;在插入时,单纯采用 Oracle 的默认格式就不是那么符合工作需要了,我们还是需要显式调用 TO_DATE 函数,例如:

insert into abc values(99, to_date('2008/05/31:12:00:00AM', 'yyyy/mm/dd:hh:mi:ssam'));

TO_DATE 函数的语法:

TO_DATE(char [, fmt [, 'nlsparams'] ])

char 是表示日期和时间的字符串。fmt 的表示方法和 TO_CHAR 函数一样。

我们前面一直提到 Oracle 默认的日期时间格式是“DD-MON-YY”,其实,我们还可以修改这个默认格式,把它改成我们需要的格式。在 SQL*plus 里面输入下面的命令:

alter session set NLS_DATE_FORMAT='<my_format>'; ――这个改变只对当前的会话(session)有用。

例如:

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

会话已更改。

SQL> insert into abc (b) values('2004-08-26');

已创建1行。

用 Oracle 内置的函数 SYSDATE 可以返回系统当前的日期和时间,例如:

select to_char(sysdate, 'Dy DD-Mon-YYYY HH24:MI:SS') as "Current Time" from dual;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: