将日期转换为varchar2丢失时间部分

时间:2014-01-14 12:51:42

标签: oracle casting

知道为什么在将日期转换为varchar后丢失时间戳(FYI:数据类型是rpd中的datetime) 如果我有约会日期;

date = 5/2/2011 9:18:26 AM CAST(日期为varcchar(100))给出5-2-2011,时间部分丢失。

不知道这个的原因,任何人都可以给我一些解释

根据Oracle官方文档的CAST指令,应该允许这样的强制转换。 enter image description here

2 个答案:

答案 0 :(得分:5)

取决于NLS_DATE_FORMAT

SQL> alter session set nls_date_format = 'fmdd-mm-yyyy';

Session altered.

SQL> select cast(sysdate as varchar2(100)) from dual;

CAST(SYSDATEASVARCHAR2(100))
---------------------------------------------------------------------
14-1-2014

1 row selected.

SQL> alter session set nls_date_format = 'fmdd-mm-yyyy fmhh24:mi:ss';

Session altered.

SQL> select cast(sysdate as varchar2(100)) from dual;

CAST(SYSDATEASVARCHAR2(100))
---------------------------------------------------------------------
14-1-2014 14:17:43

1 row selected.

最好使用TO_CHAR,因为a_horse_with_no_name已经建议。

答案 1 :(得分:3)

cast (date as varchar2)将使用当前有效的nls_date_format,默认情况下不包含时间。

要获得时间,您需要设置nls_date_format:

alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

或者,不改变会话:

to_char(date,'yyyy-mm-dd hh24:mi:ss')