为什么CAST(SYSDATE AS CHAR)不提供与TO_CHAR()相同的细节?

时间:2014-07-15 22:03:03

标签: oracle casting sysdate

我更喜欢使用跨平台可用的功能。所以为了得到当前的时间,我试过了:

CAST(SYSDATE AS CHAR(19))

......但只是'07 -JUL-14'。如果我使用Oracle的本机函数:

TO_CHAR(SYSDATE, 'YYYY-MM-DD hh:mi:ss')

...我得到了我期望的所有细节。 The doc page for SYSDATE表示值返回是日期/时间。那么为什么CAST(SYSDATE AS CHAR)没有返回日期/时间值?

我很想回答“Oracle,默认情况下,在将它们转换为CHAR或VARCHAR时会截断日期”,但我的Oracle经验有限,所以如果专家能给出一个专家,我会保留这个问题。更好的答案。例如,有什么方法可以改变这种行为吗?是否有一些历史原因导致Oracle决定CAST以这种方式销毁信息?

1 个答案:

答案 0 :(得分:5)

cast使用NLS_DATE_FORMAT中定义的格式将DATE转换为字符串:

SQL*Plus: Release 12.1.0.1.0 Production on Wed Jul 16 00:39:11 2014

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Last Successful login time: Wed Jul 16 2014 00:38:39 +02:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing optio

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

Session altered.

SQL> select cast(sysdate as varchar(20)) as the_date from dual;

THE_DATE
--------------------
2014-07-16 00:39:27

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

Session altered.

SQL> select cast(sysdate as varchar(20)) as the_date from dual;

THE_DATE
--------------------
16.07.2014 00:39

SQL>