2014-01-13 6 views
5

Wie kann ich nur den Zeitabschnitt einer SQL datetimeoffset-Variablen festlegen?Ändern Sie nur den Zeitteil eines datetimeoffset in SQL

Zum Beispiel:

DECLARE @date datetimeoffset = '2014-01-11 11:04:26 +02:00' 

Ich möchte zwei weitere datetimeoffsets berechnen:

@startdate should be '2014-01-11 00:00:00 +02:00' 
@enddate should be '2014-01-12 00:00:00 +02:00' 

Aber alle Lösungen, die ich den Offset auf Null gesetzt versucht.

HINWEIS: Ich brauche den ursprünglichen Offset in den Ergebnissen, da ich sie mit einigen datetimeoffset Spalten in einer Tabelle vergleichen muss. Das Casting auf ein Datum wird also nicht funktionieren.

Weitere Anmerkung: Dies wäre in SQL2012 ziemlich einfach; Ich könnte DATETIMEOFFSETFROMPARTS verwenden. Leider kann ich im Moment nicht auf 2012 upgraden. Beispiel:

SET @startdate = SELECT DATETIMEOFFSETFROMPARTS(datepart(yyyy, @date), datepart(mm, @date), datepart(dd, @date), 0, 0, 0, 0, datepart(tz, @date), 0, 7); 
+0

Wenn Sie den Zeitteil entfernen möchten, verwenden Sie dann 'Stimmen (@StartDate als Datum)'. –

+0

Könnten Sie den Code, den Sie ausführen wollten, genau schreiben und das Ergebnis erwarten, das Sie erwarten? – OzrenTkalcecKrznaric

Antwort

3
DECLARE @date DATETIMEOFFSET = '2014-01-11 11:04:26 +02:00' 

SELECT @date InputDate, 
CONVERT(DATETIMEOFFSET,(CONVERT(VARCHAR(20),CONVERT(DATETIME,(CONVERT(DATETIME,CONVERT(DATE,@date))))) + ' ' + RIGHT(@date,6))) StartDate, 
CONVERT(DATETIMEOFFSET,(CONVERT(VARCHAR(20),CONVERT(DATETIME,(CONVERT(DATETIME,CONVERT(DATE,DATEADD(day,1,@date)))))) + ' ' + RIGHT(@date,6))) EndDate 
+0

Danke das funktioniert super. Macht es Ihnen etwas mehr zu erklären? Es scheint eine Zeichenfolge aus den Teilen des Eingabedatums zusammenzusetzen. – Kev

+0

Ok. CONVERT (VARCHAR (20), (KONVERT (DATETIME, CONVERT (DATUM, @ date))) Der obige Teil wird verwendet, um das Datum von der Eingabe zu erhalten und in datetime umzurechnen, so dass die explizite Konvertierung hier 00 ist : 00.00 – Kishore

+0

2. Hier bekomme ich einen Offset-Wert von der Eingabe mit String-Funktionen (Right-Funktion), da datefunction einige Einschränkungen bezüglich Timeoffset hat – Kishore

4
DECLARE @date DATETIMEOFFSET = '2014-01-11 11:04:26 +02:00' 

SELECT TODATETIMEOFFSET(CAST(@date AS date),DATEPART(tz,@date)) 
SELECT TODATETIMEOFFSET(DATEADD(day,1,CAST(@date AS date)),DATEPART(tz,@date)) 
Verwandte Themen