0

如果可能,我更喜欢使用跨平台可用的功能。因此,为了获得当前时间,我尝试了:

CAST(SYSDATE AS CHAR(19))

...但只得到'07-JUL-14'。如果我使用 Oracle 的原生函数:

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

...我得到了我期望的所有细节。 文档页面SYSDATE说返回的值是日期/时间。那么为什么不CAST(SYSDATE AS CHAR)返回日期/时间值呢?

我很想用“默认情况下,Oracle 在将日期转换为 CHAR 或 VARCHAR 时截断日期”来自我回答,但我对 Oracle 的经验有限,所以我会留下这个问题,以防任何专家能给出更好的答案。例如,有没有办法改变这种行为?CAST甲骨文决定以这种方式销毁信息是否有一些历史原因?

4

1 回答 1

5

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

SQL*Plus:2014 年 7 月 16 日星期三 00:39:11 发布 12.1.0.1.0 生产

版权所有 (c) 1982, 2013,甲骨文。版权所有。

上次成功登录时间:2014 年 7 月 16 日星期三 00:38:39 +02:00

连接到:
Oracle Database 12c 企业版 12.1.0.1.0 - 64 位生产
具有分区、OLAP、高级分析和真实应用程序测试选项

SQL>更改会话集 nls_date_format = 'yyyy-mm-dd hh24:mi:ss';

会话已更改。

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

日期
--------------------
2014-07-16 00:39:27

SQL>
SQL>更改会话集 nls_date_format = 'dd.mm.yyyy hh24:mi';

会话已更改。

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

日期
--------------------
16.07.2014 00:39

SQL>
于 2014-07-15T22:41:19.190 回答