2017-11-20 4 views
0

Ich versuche, eine Abfrage zu schreiben, die Datensätze zurückgibt, die zwischen zwei Daten (jeweils mit einem Cutoff im TIME-Format) fallen. Bisher habe ich folgendes:Convert LOCAL TIME-Datentyp Wert in UTC-Zeit

Zum Beispiel:

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' 

jedoch die Grenzzeit 03: 00: 00,0000000 ist nur ein Platzhalter für, wie ich denke, dass die Abfrage formatiert werden muss - die Zeit braucht, um zu sein aus einer anderen Tabelle 'TransferSubscriber' aus dem Feld 'Cutoff' als Datentyp TIME abgerufen. Das Problem ist, dass dieses Cutoff-Feld in der Tabelle TransferSubscriber in der LOCAL-Zeit (in einem TIME-Datentyp) gespeichert wird. Ich muss diese ZEIT in UTC umwandeln und sie in meine BETWEEN-Anweisung im TIME-Teil des Vergleichs einfügen (wo die 03: 00: 00.0000000).

Ich habe folgendes geschrieben, die Probleme verketten die Datums- und Zeitvariablen in einem hat:

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 wirft Fehler: „Operand Datentyp Datum ist ungültig für Operator add“

Ich bin sicher, dass es eine bessere Möglichkeit gibt, lokale TIME in UTC-Zeit zu konvertieren, und verwenden Sie es, um zwei DATETIME-Felder zu vergleichen.

Jede Hilfe wäre großartig!

Antwort

0

die folgenden Versuchen,

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 

Hoffe, es hilft.