SQL Deutsche Zeit erhalten

Squicky

Lt. Commander
Registriert
Sep. 2002
Beiträge
1.422
Hallo

ich einer Spalte vom Typ Datetime ist das Datum und Uhrzeit in UTC (Koordinierte Weltzeit) gespeichert. Nun ist die echte deutsche Zeit aber je nach Winter bzw. Sommerzeit um zwei bzw. eine Stunde verschoben.

Ich benötige nun einen Select Befehl, der mir diese Spalte auf die deutsche Zeit umrechnet.

Also:
Wenn ich in dieser Spalte zwei Werte habe: 04.10.2010 09:30 Uhr und 04.04.2010 15:45 Uhr, dann möchte ich gerne folgende zwei Werte erhalten:
04.10.2010 09:30 Uhr ----> 04.10.2010 11:30 Uhr (Plus 2 Stunden, da Winterzeit)
04.04.2010 15:45 Uhr ----> 04.04.2010 16:45 Uhr (Plus 1 Stunde, da Sommerzeit)

Wie kann man diese Umrechnung per (Microsoft 2008) SQL schnell und einfach lösen?

Danke
 
@rejoice

???? Was soll / ist das?

1. Du nutzt mySQL und nicht Microsoft SQL!!!
2. Ich möchte nicht die Anzeige ändern, sonder von UTC nach deutscher Sommer- und Winterzeit umrechnen!
Hast du meinen Betrag/Frage gelesen?

Kann ein Admin den Beitrag von rejoice und dann auch diese Antwort löschen?
 
@MacGyver

Leider helfen deine zwei Lösungen auch nicht weiter:
1. Lösung: Es wird nicht gerechnet, sondern nur die Anzeige der Ausgabe geändert.
2. Lösung: Man kann nur einen festen Offset hinzurechnen. Eine Sommer - Winterzeit Berücksichtigung ist nicht möglich!
 
Eigentlich gehört die Umrechnung von UTC zu lokaler Zeit in den Präsentationslayer, daher gibt es dafür keinen direkten Support in der DB (außer eben über DATEADD), da du nicht wissen kannst, von welcher Zeitzone aus auf die DB zugegriffen wird (bei einer Client/Server-Architektur).
 
1.) Erstelle eine CLR Projekt für SQL2008:
Beispielcode für SQL2005:

Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Imports System.Text.RegularExpressions
Imports System.Collections


Partial Public Class DATETIMEFUNCTIONS
<SqlFunction(name:="utcltc")> _
Public Shared Function utctoltc(ByVal value As Date) As Date
Return value.ToLocalTime()
End Function
End Class

2.) Assembly installieren

-- Enable CLR
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO

-- Assembly hinzufügen
-- DLL muß auf dem Server liegen!
CREATE ASSEMBLY UTCtoLTC
from 'C:\DATETIME\UTCtoLTC.dll'
GO

-- CLR Function hinzufügen
CREATE FUNCTION dbo.utcltc(@value datetime)
returns datetime
as external name
UTCtoLTC.[UTCtoLTC.DATETIMEFUNCTIONS].utctoltc
GO

-- Test Assembly
select dbo.utcltc(getutcdate())


Das Zauberwort lautet CLR der Rest ist ein einzeler (value.ToLocalTime())

MFG
CLIF
 
@ Clif
Danke für deine Antwort.
Funktioniert super!
 
Zurück
Oben