17

我的访问表如下:

insert into Visit
values(12, to_date('19-JUN-13', 'dd-mon-yy'), to_date('19-JUN-13 12:00 A.M.' , 'dd-mon-yy hh:mi A.M.'));
insert into Visit
values(15, to_date('20-JUN-13', 'dd-mon-yy'), to_date('20-JUN-13 02:00 A.M.' , 'dd-mon-yy hh:mi A.M.'));
insert into Visit
values(18, to_date('21-JUN-13', 'dd-mon-yy'), to_date('21-JUN-13 10:30 A.M.' , 'dd-mon-yy hh:mi A.M.'));

当我尝试查询它时: select * from Visit我得到:

SQL> select * from visit;

   SLOTNUM DATEVISIT ACTUALARRIVALTIME                                                                                                                                                                                                                                                                                                                                                                                 
---------- --------- ------------------------------                                                                                                                                                                                                                                                                                                                                                                     
        12 19-JUN-13 19-JUN-13                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
        15 20-JUN-13 20-JUN-13                                                                                                                                                                                                       
        18 21-JUN-13 21-JUN-13                                                                                                                                                                                                      

SQL> spool off;

时间怎么没了?

4

5 回答 5

28

您还可以设置适用于所有日期的格式,如下所示:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH:MI:SS PM';

这样,您的原始查询将以您所追求的格式输出日期,而无需使用TO_CHAR. 要恢复到通常的默认格式,只需执行以下操作:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR';
于 2013-06-20T20:39:19.973 回答
19

这是为您的实例设置为默认值的 oracle 日期格式。

您应该正确指定格式以或多或少地查看..像这样:

select to_char( datevisit, 'dd-mon-yy hh24:mi:ss' ) from visit
于 2013-06-20T20:32:55.267 回答
3

Oracle 内部遵循 'DD-Mon-YY' 格式存储在数据库中。所以它返回'DD-Mon-Y

如果你想用小时分钟和秒来日期格式。您可以在会话中更改 NLS_DATE_FORMAT。

如果您想查询该实例的唯一演示目的。使用 TO_char 函数转换为所需的格式。

SELECT slotnum, TO_CHAR (datevisit, 'DD-MON-YY ') "DATEVISIT",
       TO_CHAR (actualarrivaltime, 'DD-MON-YY HH:MI:SS AM') "ACTUALARRIVALTIME"
  FROM visit

我希望上面的查询可以为您提供您喜欢的输出。

于 2013-06-21T11:06:55.137 回答
2

您依赖于隐式日期转换,它使用您的(依赖于会话,但可能继承自数据库默认值)NLS_DATE_FORMAT设置 - 在这种情况下,它似乎是DD-MON-RR.

您可以使用to_char指定格式,例如:

select to_char(actualarrivaltime, 'DD-MON-YYYY HH:M:SS PM') from ..

文档中描述了日期时间格式模型

一般来说,最好不要依赖隐式转换。即使您现在得到了您所期望的,它们也可以是特定于会话的,因此另一个客户端中的另一个用户可能会看到不同的东西。这可能会导致失败以及看起来错误。始终指定日期和数字格式,使用to_date,to_charto_timestamp

于 2013-06-20T20:35:31.297 回答
-1
select localtimestamp from dual;
于 2020-03-27T17:51:06.197 回答