我有一個直接使用ADO.NET的SQL生成器庫。我有一個大於或 - 等於運營商創建一個選擇查詢,等等的手段:帶有時區的Oracle DateTime查詢
select *
from book
where book.date_created >= {some date}
我的問題是,{某個日期}是要始終處於UTC時區,但它是與TIMESTAMP(6)WITH TIME ZONE列的book.date_created列進行比較,該列不在UTC時區。
我可以執行查詢,但我的結果是關閉時區比較becuaes。我的查詢適用於所有日期爲date_created> = x的書籍,但返回的結果中的一些不大於x,因爲在爲時區減去5小時後,它們現在小於x。使用DateTime將返回的IDataRecord DateTime字段轉換爲UTC.SpecifyKind()
我可以形成我的查詢,以便它解釋UTC時區中的book.date_created嗎?
注:雖然我很想改變我的Oracle數據庫列不指定時區,換表的結構是不是我可以做的。
編輯: 目前,{某個日期}是一個SQL參數。它的支持數據類型是以UTC作爲時區的DateTime。作爲參數,它是一個TimestampWithTZ。該參數的值是一個DateTime,其類型也指定爲UTC。
更新: 這個問題似乎涉及到我的成績從IDataRecord設置。當我關閉DateTimes時,我使用DateTime.SpecifyKind()將它們置於UTC模式。問題是,日期時間以DateTimeKind.Unspecified出現。從未指定轉換爲UTC時,它只是刪除時區並聲明它是UTC,而不更改基礎值。我不確定如何將IDataRecord拉入TimeZone值。
是定義爲一個日期,時間戳或時間戳與時區「的一些日期」變量?你能展示一些.net代碼嗎? – tbone 2012-01-10 13:57:22
@tbone,請參閱上面的編輯。 – 2012-01-10 14:49:45
我假設你正在使用Oracle的增強版ado.net(odp.net或ODAC),並且爲「某日期」使用OracleTimeStampTZ結構,對嗎?問題可能不是你如何存儲時間戳,而是你在.NET端進行比較(這就是爲什麼我要求一些.NET代碼的原因)。 – tbone 2012-01-10 15:26:29