2011-05-23 44 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