在可能的情况下,我更喜欢使用跨平台可用的功能.所以为了获得当前时间,我尝试了:
CAST(SYSDATE AS CHAR(19))
......但只是'07 -JUL-14'.如果我使用Oracle的本机函数:
TO_CHAR(SYSDATE, 'YYYY-MM-DD hh:mi:ss')
......我得到了我期望的所有细节. 表示值返回的doc页面SYSDATE
是日期/时间.那么为什么不CAST(SYSDATE AS CHAR)
返回日期/时间值呢?
我很想回答"Oracle,默认情况下,在将它们转换为CHAR或VARCHAR时会截断日期",但我的Oracle经验有限,所以如果专家能给出更好的答案我会留下问题.例如,有什么方法可以改变这种行为吗?是否有一些历史原因导致Oracle决定以CAST
这种方式销毁信息?
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>