我想将12/8/2006 12:30:00转换为12/8/2006
我试过了 -
1. trunc(TO_DATE (effective_date_time,'DD/MM/YYYY HH24:Mi:SS'))
2. TO_DATE (effective_date_time,'DD/MM/YYYY')
但所有这些都返回值为12/8/0006。
为什么Oracle将返回0006年而不是200 6。
答案 0 :(得分:2)
如果使用effective_date_time
date
是to_date()
列,则完全没用。
首先(隐含地!)将date
转换为varchar
(基于NLS设置,只是将其再次转换回date
。
如果您希望日期列的特定格式使用to_char()
to_char(effective_date_time,'DD/MM/YYYY HH24:Mi:SS')
永远不要在to_date()
或date
列上使用timestamp
!
答案 1 :(得分:1)
您的NLS_DATE_FORMAT
年份为' YY
'年份..然后您在to_date中再次指定YYYY
的格式,因此2006
,首先被解释为06
,最终再次为0006
。
真诚的建议,不要约会To_DATE()
。只需TRUNC(yourdate)
即可。
答案 2 :(得分:1)
试试这个:
trunc(effective_date_time)
这是一个约会日期,您不需要在_DATE
当您在DATE列上使用TO_DATE(effective_date_time,' format')时,使用NLS参数将effective_date_time转换为char。我想你的NLS设置类似于' dd / mm / yy'。这就是你错误的一年的原因。
一个简单的例子:
alter session set nls_date_format = 'dd/mm/yy';
select trunc(TO_DATE (sysdate,'DD/MM/YYYY HH24:Mi:SS')) from dual;
November, 22 0014 00:00:00+0000
alter session set nls_date_format = 'dd/mm/yyyy';
select trunc(TO_DATE (sysdate,'DD/MM/YYYY HH24:Mi:SS')) from dual;
November, 22 2014 00:00:00+0000
答案 3 :(得分:1)
试试这个:
TRUNC(effective_date_time) Trunc将直接从日期格式中删除时间戳