【发布时间】: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 代替。