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

向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;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值