I'm trying to display datetime values in local time. By default, Azure SQL Database stores dates and times in UTC, there is no way around this. (This was a pain when migrating from on premise SQL Server.) I would like to display a stored time value in Central European time.
Now the local time is 11:30 (CET). UTC time is 10:30.
DECLARE @TestTime DATETIME;
SET @TestTime = '2016-11-02 10:30:00'
SELECT @TestTime
--Returns 2016-11-02 10:30:00
SELECT @TestTime AT TIME ZONE 'Central European Standard Time'
--Returns 02 November 2016 10:30:00 +01:00
I need to return 2016-11-02 11:30:00 somehow. Now for the fun part:
As has been suggested here:
SELECT convert(DATETIME,@TestTime AT TIME ZONE 'Central European Standard Time',1)
--Returns 2016-11-02 09:30:00 So instead of adding the timezonedifference it subtracts it.
This works, but makes me sick:
SELECT DATEADD(MINUTE,DATEPART(tz,@TestTime AT TIME ZONE 'Central European Standard Time'),@TestTime)
--Returns 2016-11-02 11:30:00
A similar solution has been suggested here, but it plays with string operations. My suspicion is that something is wrong in AT TIME ZONE; it should have displayed 11:30 +1, and not 10:30 +1, no?
Is there really no proper way to display a UTC time in local time? This "hacking around it" feels awfully dirty, especially since at any point in time it just might stop working (e.g. Microsoft fixes / introduces a bug).
Thanks!