我使用的是Oracle 10g express。
我写这个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方面,当我读取ResultSet时,我有:Janvier 01,0011
怎么可能?我想要的只是Oracle存储日期,因为我要求:DD / MM / YYYY
感谢您的帮助
答案 0 :(得分:3)
您不应在SELECT中应用TO_DATE函数,因为值已经是日期。要将它们转换为字符串,请使用TO_CHAR。
当您选择TO_DATE(datevalue)时,Oracle发现TO_DATE需要一个字符串参数,因此它会执行隐式TO_CHAR(datevalue)以使其工作。隐式TO_CHAR使用默认格式掩码,这通常会省略世纪。
答案 1 :(得分:1)
如果您真的希望Oracle“按照您的要求”存储日期,那么您要处理的是字符串,而不是日期。但是,如果是约会,我建议您将其存储为日期。
Oracle使用单个内部数据格式存储日期 - 当您查询日期时,它会根据提供的日期格式对其进行格式化以便显示。您的Java客户端只是使用不同的日期格式。