SQL Server 2016を使用しています。これはレポート用のSPです。 2021年2月22日の日付範囲を指定すると、レポートには2011年2月21日のアイテムが含まれます。日付は、DateTimeOffsetとしてdbに格納されます。where句の日付範囲フィルタの日付範囲フィルタの使用
このクエリでは、私は22日に帰りたいと思っていますが、21番も取得しています。
@startと@endは、ユーザーが入力した日付範囲を表します。 @storeddateは、レポートのフィルタリングに使用されたdbからの日付です。私の計画は、オフセット日付を変換し、 '日付'の部分をフィルタリングするために取り出していますが、動作していません。
declare @start date = '2017-02-22';
declare @end date = '2017-02-22';
declare @storeddate datetimeoffset = '2017-02-22 00:00:19.0000000 +00:00';
;with dates as
(
select @storeddate as 'raw'
, @storeddate AT TIME ZONE 'Pacific Standard Time' as offset
, CONVERT(datetime, @storeddate) AT TIME ZONE 'Pacific Standard Time' as dt
, CONVERT(datetime, @storeddate AT TIME ZONE 'Pacific Standard Time') as d
, CAST(CONVERT(datetime, @storeddate) AT TIME ZONE 'Pacific Standard Time' as date) as 'casted'
, @start as 'start'
, @end as 'end'
)
select * from dates
WHERE (
CAST(CONVERT(datetime, @storeddate) AT TIME ZONE 'Pacific Standard Time' as date) >= @start
AND CAST(CONVERT(datetime, @storeddate) AT TIME ZONE 'Pacific Standard Time' as date) < DATEADD(day, 1, @end))
編集メモを追加するには:奇妙なシナリオの
そのようなもの。これは、オレゴン州でのみ使用されるイントラネットWebアプリケーションです。 Web開発者は、すべての日付をUTCに変更したjavascriptのdatepickerライブラリを使用していました。それらを元に戻す方法を理解できず、datetimeoffsetとしてdbに保存しました。だから今、私は正しい日付を表示するためにすべてのレポートを変更する必要があります。 'At Time Zone'はレポートの日付の表示を修正しましたが、日付範囲フィルタのwhere句では機能しません。
奇数シナリオのその種:だから答えはこれでした。これは、オレゴン州でのみ使用されるイントラネットWebアプリケーションです。 Web開発者は、すべての日付をUTCに変更したjavascriptのdatepickerライブラリを使用していました。それらを元に戻す方法を理解できず、datetimeoffsetとしてdbに保存しました。だから今、私は正しい日付を表示するためにすべてのレポートを変更する必要があります。 'At Time Zone'はレポートの日付の表示を修正しましたが、日付範囲フィルタのwhere句では機能しません。 – BattlFrog
'At Time Zone'に頼るのではなく、dateadd関数を使用してオフセットを調べてみてください。私は、日付が格納される方法ではなく、表示にのみ影響を与えると思います。私は例を貼り付けようとしており、フォーマット上の問題がある。 –