我更喜欢使用跨平台可用的功能。所以为了得到当前的时间,我试过了:
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
以这种方式销毁信息?
答案 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>