与甲骨文的约会
我正在使用 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 表时。这是我在日期字段中看到的: 01/01/11
在一个存储过程中我写:
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方面,当我读取结果集时,我有: Janvier 01, 0011
那怎么可能?我想要的只是 Oracle 按照我的要求存储日期:DD/MM/YYYY
感谢您的帮助
Iam using Oracle 10g express.
I write this SQL order :
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');
When I look in the compte_courant table. this is what I see in the date field :
01/01/11
in a stored procedure I write :
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;
On the java side, when I read my ResultSet, I have : Janvier 01, 0011
How could that be ? All I want is Oracle to store the date as I asked to : DD/MM/YYYY
Thanks for your help
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您不应在 SELECT 中应用 TO_DATE 函数,因为这些值已经是日期。要将它们转换为字符串,请使用 TO_CHAR。
当您选择 TO_DATE(datevalue) 时,Oracle 发现 TO_DATE 需要字符串参数,因此它执行隐式 TO_CHAR(datevalue) 来使其工作。隐式 TO_CHAR 使用默认格式掩码,该掩码通常会省略世纪。
You should not apply the TO_DATE function in your SELECT since the values are already dates. To convert them to strings use TO_CHAR.
When you select TO_DATE(datevalue), Oracle finds that TO_DATE requires a string argument, so it does an implicit TO_CHAR(datevalue) to make it work. The implicit TO_CHAR uses the default format mask, which often omits the century.
如果您确实希望 Oracle “按照您的要求”存储日期,那么您处理的是字符串,而不是日期。但是,如果它是日期,我建议您将其存储为日期。
Oracle 使用单一的内部数据格式存储日期 - 当您查询日期时,它会根据提供的日期格式对其进行格式化以进行显示。您的 Java 客户端只是使用了不同的日期格式。
If you really want Oracle to store the date "as you asked it to", what you are dealing with is a string, not a date. However, if it's a date, I recommend you store it as a date.
Oracle stores dates using a single, internal, data format - when you query a date it formats it for display according to the supplied date format. Your java client is simply using a different date format.