2017-08-14 95 views
0

我有下面的代碼 -Oracle查詢日期顯示參數返回的日期欄沒有記錄

CMD = new OracleCommand("SELECT * FROM BOOKINGSV3 WHERE DT = :DateInQuestion ", Con); 
CMD.Parameters.Add("DateInQuestion", OracleDbType.Date).Value = DateTime.Today; 

DT是日期列,我知道甲骨文商店明確日期,如果我嘗試手動與'14 -AUG- 17 00:00:00'我可以檢索所需的結果。我怎樣才能使用一個日期使用參數以外的參數進行搜索,而不是使用字符串參數並以'14 -AUG-17 00:00:00'格式構造一個字符串?

enter image description here

enter image description here

+0

如果你一直在尋找今天,那麼你可以搜索'trunc(sysdate)'而不是綁定一個值;但大概這個價值會改變?應用程序和數據庫是否在相同的語言環境中? (也許值得檢查存儲的日期是在正確的世紀;如果你的NLS_DATE_FORMAT使用YY而不是RR,但不認爲這是這裏的問題...) –

+0

是的,值會改變,今天只是一個例子。我的開發機器使用美式鍵盤佈局,區域設置是英國(與服務器相同)。 2月2日,我嘗試了美國和英國的格式參數,但仍未找到任何結果 - 日期時間(2017,8,2)和日期時間(2017,2,8) –

+0

好吧,那麼如果是關於C#(或任何此代碼是)我不會發現它。但是,我仍然總是懷疑這種事情的2位數年份,所以如果只是關閉我,你能否檢查'dt'值實際上是2017年?他們都準備午夜了? –

回答

0

一種方式做,這是創建一個包含你要搜索和改變你的查詢明確創建使用您在字符串中使用的日期格式的日期日期的字符串。

CMD = new OracleCommand("SELECT * FROM BOOKINGSV3 WHERE DT = to_date(':DateInQuestion','DD-MM-YYYY HH24:MI:SS') ", Con); 

這樣你控制日期格式而不是一些NLS設置。

+0

如果它被綁定爲一個日期('OracleDbType.Date'),那麼爲什麼NLS設置仍然重要? (另外...使用'MON'仍然依賴於NLS;如果你保留了這個值,那麼使用YYYY會使得0017不是2017 * 8-) –

1

如果您DT值具有非午夜時間,然後獲得在某一天的所有值,你可以使用範圍:

SELECT * FROM BOOKINGSV3 WHERE DT >= :DateInQuestion AND DT < :DateInQuestion + 1 

>=意味着它會發現從午夜開始的時間; < .. + 1將限制在第二天午夜之前。