參數化查詢是一個好的開始,因爲您可以將本機.Net DateTime對象傳遞到企業庫(例如)並指定它是DbType.DateTime
並讓EL擔心它。但是,如果你不能這麼做,因爲你沒有使用EL或類似的東西,並且堅持使用發佈在你的問題中的SQL字符串,那麼你需要知道Oracle如何在內部處理日期,特別是關於格式。
使用SQL開發人員或SQLPLUS,執行以下命令:
Select To_Char(sysdate) from Dual;
所顯示的格式是Oracle實例預計日期是如果你使用TO_DATE和Oracle將在TO_CHAR使用的格式。如果您在任何一個電話中都偏離該格式,那麼您將遇到問題。然而,無論默認格式的使用,你可以通過在調用中指定它覆蓋它:
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH:MI:SS';
:
Select To_Char(sysdate, 'YYYY/MM/DD HH:MI:SS') from Dual;
Select To_Date('2013/02/26 05:03:27', 'YYYY/MM/DD HH:MI:SS') from Dual;
您可以通過設置NLS_DATE_FORMAT參數設置要Oracle使用默認的隱
請注意,前面的說明僅更改執行的會話的默認。我們使用自定義格式在我們的Oracle系統,並確保我們得到它,我們的登錄觸發器後使用的所有會話:
create or replace TRIGGER NLS_Parameters_OnLogon AFTER LOGON ON SCHEMA BEGIN
-- This makes the database case insensitive for sorting and searching and sets the default date format for TO_CHAR and TO_DATE
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_COMP=LINGUISTIC';
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_SORT=BINARY_CI';
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT=''YYYY/MM/DD HH:MI:SS''';
End;
有可能通過編輯一些改變整個Oracle服務器的默認日期格式的Oracle配置文件,但由於我們必須部署到我們無法控制的客戶端服務器,因此我們使用此方法。
This article涵蓋了我剛剛在示例中所做的更多一點。
爲什麼拿一個日期,轉換爲字符串,然後_back_日期?這只是不必要的工作。如果你使用參數化查詢,你將不必經歷這個麻煩! – 2013-02-26 16:52:30
我明白你的意思。上面的代碼是糟糕的,但是對VB來說是新的,我還不知道更好。我想要做的就是創建一個日期時間/時間戳作爲變量,並將其插入Oracle日期字段。 – Chris 2013-02-26 16:56:36
我編輯了你的標題。請參見「[應的問題包括‘標籤’,在他們的頭銜?(http://meta.stackexchange.com/questions/19190/)」,這裏的共識是「不,他們不應該」。 – 2013-02-26 17:06:43