2013-04-03 44 views
6

如何使用oracle 10g将系统日期以dd/mm/yyyy插入到表中?在oracle中插入系统日期

在使用以下查询时,它将系统日期插入为03/04/0013。我需要03/04/2013。你能帮我解决这个问题吗?

insert into GtTable 
values('111','Name',300,'Tour',to_date('02/04/2012','DD/MM/YYYY'),to_date(sysdate,'DD/MM/YYYY')); 

但是在直接插入'02/04/2012'时,与'02/04/2012'相同。

+0

你确定它正在工作吗?你有没有尝试类似“22/04/2012''?什么是'nls_date_format'设置? – hofmeister

回答

4

如果你插入的最后一个字段是一个日期型字段,你不应该需要对SYSDATE任何转换,因此,下面应该是OK:

insert into GtTable 
values('111', 'Name', 300, 'Tour', to_date('02/04/2012','DD/MM/YYYY'), sysdate); 

但是,如果它是一个varchar领域,下面应该工作:

insert into GtTable 
values('111', 'Name', 300, 'Tour', to_date('02/04/2012','DD/MM/YYYY'), to_char(sysdate, 'dd/mm/yyyy')); 
+0

我尝试用它来插入当前日期,但它给了我日期格式无法识别的错误to_date(SYSDATE,'DD-MMM-YYYY') –

+0

@MRAND我认为你得到的问题已被** ABCade * *以上,在[此评论](https://stackoverflow.com/a/15779452/2156229) – warantesbr

12

约会你不应该激活TO_DATE

sysdate已经是一个日期,当您运行TO_DATE与它作为第一个参数,您使Oracle隐式转换为一个字符串根据NLS_DATE_FORMAT在您的情况下可能包含YY而不是YYYY

Oracle中的日期是表示日期和时间的数字,它不会有一个“格式”,如果你想插入SYSDATE没有你需要截断它像这样的时间价值:

insert into GtTable 
values('111','Name',300,'Tour',to_date('02/04/2012','DD/MM/YYYY'),trunc(sysdate)) 
+0

[这里](http://www.sqlfiddle.com/#!4/d41d8/9426)是一个sqlfiddle的例子 –

0

我认为显示的格式是由环境参数决定的。 TO_CHAR(SYSDATE,'DD/MM/YYYY')可以让你插入系统日期为DD/MM/YYYY,但它不再是日期类型。

+1

我不认为这是个好主意,因为如果数据类型是'DATE',那么oracle会根据nls_date_format隐式地将字符串转换为日期,即使'to_char'函数可以正常工作,插入也会失败...见[这里](http://www.sqlfiddle.com/#!4/d41d8/9430) –

+0

年,你是对的。如果只想显示为dd/mm/yyyy,to_char可以工作。虽然只是为了插入,如果这个列是数据类型,插入将失败。你可以返回,但这是一个有点愚蠢...... :) – Gentlezerg