2011-05-23 68 views
2

Iam使用Oracle 10g express。与Oracle的日期

我写这篇文章的SQL命令:

INSERT INTO compte_courant (num_compte_courant, num_client, libelle_compte_courant, solde_compte_courant, decouvert_compte_courant, taux_agios_compte, date_ouverture_compte_courant, date_fermeture_compte_courant, etat_compte_courant) VALUES 
('0001A1234', S_CLIENT.CURRVAL, 'compte courant', 1000.00, -300, 5.2, TO_DATE('01/01/2011', 'DD/MM/YYYY'), NULL, 'open'); 

当我看在compte_courant表。这是我在日期字段中看到: 11年1月1日

在存储过程中我写的:

select TO_DATE(date_operation_transfert, 'DD/MM/YYYY'), TO_DATE(date_valeur_transfert, 'DD/MM/YYYY'), montant_transfert, compte_cible 
    from transfert 
    where compte_cible = numAccount 
    order by date_operation_transfert desc; 

在Java端,当我看到我的结果集,我有:让维耶01 ,0011

这怎么可能?所有我想要的是Oracle存储为一问才日期:DD/MM/YYYY

感谢您的帮助

回答

3

你不应该适用TO_DATE函数在SELECT,因为值已经日期。要将它们转换为字符串,请使用TO_CHAR。

当您选择TO_DATE(datevalue)时,Oracle发现TO_DATE需要一个字符串参数,因此它会执行隐式的TO_CHAR(datevalue)以使其工作。隐含的TO_CHAR使用默认格式掩码,通常会忽略世纪。

1

如果您确实希望Oracle按照您的要求存储日期,那么您所处理的是字符串,而不是日期。但是,如果是日期,我建议您将其作为日期进行存储。

Oracle使用单一的内部数据格式存储日期 - 当您查询日期时,会根据提供的日期格式对其日期进行格式化。你的Java客户端只是使用不同的日期格式。

+0

感谢您的回答。即使我使用TO_CHAR函数,也存在一个问题。它回来的字符串是23/05/0011。 – mlwacosmos 2011-05-25 06:42:11

+0

问题是我的日期以这种方式存储:DD/MM/RR(NLS_date_format)。我试图在spfile中改变它,但不能。这是一些参数比我的NLS_DATE_FORMAT更强 – mlwacosmos 2011-05-25 06:44:53

+0

如果日期存储为字符串,则不应对它们使用“TO_CHAR”。如果日期存储为日期,并且'TO_CHAR(col,'DD/MM/YYYY')'返回23/05/0011,这意味着日期在公元11年! – 2011-05-26 02:55:02