删除PL / SQL中的时间戳的问题

时间:2014-11-22 15:15:47

标签: sql oracle date plsql timestamp

我想将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 enter image description here 6。

4 个答案:

答案 0 :(得分:2)

如果使用effective_date_time dateto_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将直接从日期格式中删除时间戳