私は、directly ADO.NETを使用するSQLビルダーライブラリを持っています。私の問題は、{いくつかの日付}は常にUTCタイムゾーンであることを行っているということですが、それだタイムゾーン付きOracle DateTimeクエリ
select *
from book
where book.date_created >= {some date}
:ように私は、等しいより-大きいか、オペレータに選択クエリを作成する手段を持っていますTIMESTAMP(6)WITH TIME ZONE列のbook.date_created列と比較されます。これはUTCタイムゾーンには含まれません。
私はクエリを実行できますが、私の結果はタイムゾーンの比較のためにオフになっています。私のクエリは、date_created> = xとなっているすべての書籍のものですが、返される結果の一部は、タイムゾーンの5時間を引いた後にxより小さくなるため、xより大きくはありません。返されるIDataRecord DateTimeフィールドは、DateTime.SpecifyKind()を使用してUTCに変換されます。
UTCタイムゾーンでbook.date_createdを解釈するようにクエリを作成できますか?
注:Oracle DBの列を変更してタイムゾーンを指定したくないのですが、テーブル構造を変更することはできません。
編集: 現在、{some date}はSQLパラメータです。バックデータ型は、タイムゾーンとしてUTCを持つDateTimeです。パラメータとして、TimestampWithTZです。パラメータのValueは、UTCとして指定された種類のDateTimeです。
更新: この問題は、IDataRecordの結果セットに関連しているようです。 DateTimesをオフにすると、DateTime.SpecifyKind()を使用してDateTime.SpecifyKind()がUTCモードになります。問題は、DateTimeKind.Unspecifiedとして日付時刻が出てくることです。 UnspecifiedからUTCに変換するときは、タイムゾーンを削除し、基になる値を変更せずにUTCと宣言します。 IDataRecordをTimeZone値にプルする方法がわかりません。
は、タイムゾーン付きの日付、タイムスタンプ、またはタイムスタンプとして定義される「some date」変数ですか?いくつかの.netコードを使用することができますか? – tbone
@tbone、上記の編集を参照してください。 –
私は、Oracleの拡張ADO.NET(odp.netまたはODAC)を使用していて、「日付」にOracleTimeStampTZ構造を使用していると仮定します。問題は、タイムスタンプをどのように格納するのかではなく、.NET側で比較していることです(.NETコードを要求した理由です)。 – tbone