【问题标题】:Why does CAST(SYSDATE AS CHAR) not provide the same detail as TO_CHAR()?为什么 CAST(SYSDATE AS CHAR) 不提供与 TO_CHAR() 相同的详细信息?
【发布时间】:2014-07-15 22:03:03
【问题描述】:

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

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 以这种方式销毁信息是否有某种历史原因?

【问题讨论】:

  • 我认为cast 使用当前的 NLS 设置将日期转换为字符表示。我认为如果你改变你的 NLS_DATE_FORMAT,cast 会返回一个不同的字符串
  • @a_horse_with_no_name,不,这不起作用。很奇怪。我相信 w.r.t cast(date as char/varchar) 一定有问题,所以总是看到人们使用 to_char 代替。

标签: oracle casting sysdate


【解决方案1】:

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> alter session set 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> alter session set 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2019-12-31
    相关资源
    最近更新 更多