2017-11-20 19 views
0

2つの日付の間にあるレコードを返すクエリを作成しようとしています(それぞれTIME形式のカットオフがあります)。例えばLOCAL TIMEデータ型の値をUTC時刻に変換する

:これまでのところ私は、以下の持っている

カットオフ時間03しかし
SELECT 
T.CustomerName, 
T.MoneyToTransfer 
FROM dbo.[Transfer] T 
WHERE T.CreatedDate BETWEEN '2016-05-10 03:00:00.0000000' AND '2016-05-11 03:00:00.0000000' 

:00:00.0000000私は、クエリをフォーマットする必要がどのように考えるかのプレースホルダのみである - TIMEはする必要がありますが、データ型TIMEとして格納された 'Cutoff'フィールドの別のテーブル 'TransferSubscriber'から取得されたものです。問題は、TransferSubscriberテーブルのこのCutoffフィールドが(TIMEデータ型の)LOCAL時間に格納されていることです。私はこのTIMEをUTCに変換し、それを比較のTIME部分のBETWEENステートメント(03:00:00.0000000)に置きます。

私は1つに日付と時刻の変数を連結の問題を有し、次のことを書かれている:

DECLARE @startDate DATE = (SELECT CONVERT(VARCHAR, '2016-07-13', 110)) 

DECLARE @Cutoff AS TIME(7) = (SELECT TOP 1 S.CutoffTime FROM Subscriber.dbo.TransferSubscriber S WHERE ID = 10) 

DECLARE @CutoffUTC TIME = (SELECT DATEADD(second,DATEDIFF(second, GETDATE(), GETUTCDATE()), @Cutoff)) 

DECLARE @StartDateFinal = @startDate + @CutoffUTC 

@StartDateFinalでエラーが発生します:

「オペランドのデータ型日付が追加演算子には無効です。」

ローカルTIMEをUTC時間に変換し、それを使用して2つのDATETIMEフィールドを比較するより良い方法があると確信しています。

助けがあれば助かります。

答えて

0

DECLARE @startDate DATE = (SELECT CONVERT(VARCHAR, '2016-07-13', 110)) 

DECLARE @Cutoff AS TIME(7) = (SELECT TOP 1 S.CutoffTime FROM Subscriber.dbo.TransferSubscriber S WHERE ID = 10) 

DECLARE @CutoffUTC TIME = (SELECT DATEADD(second,DATEDIFF(second, GETDATE(), GETUTCDATE()), @Cutoff)) 

DECLARE @StartDateFinal DATETIME2 

SELECT @StartDateFinal=CAST(CAST(@startDate AS VARCHAR) +' '+ CAST(@CutoffUTC AS VARCHAR) AS DATETIME2) 

SELECT @StartDateFinal 

はそれが役に立てば幸い、次のことを試してみてください。

関連する問題