From 1a67581f73a2eb5c68bcb4fa2ee546bc25d1e4aa Mon Sep 17 00:00:00 2001 From: MaximoB Date: Tue, 28 Nov 2017 13:02:15 -0600 Subject: [PATCH 1/2] Adding ToDateTimeOffset function --- Database/Database.sqlproj | 1 + Database/Functions/ToDateTimeOffset.sql | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 Database/Functions/ToDateTimeOffset.sql diff --git a/Database/Database.sqlproj b/Database/Database.sqlproj index e1afd79..ca40801 100644 --- a/Database/Database.sqlproj +++ b/Database/Database.sqlproj @@ -82,5 +82,6 @@ + \ No newline at end of file diff --git a/Database/Functions/ToDateTimeOffset.sql b/Database/Functions/ToDateTimeOffset.sql new file mode 100644 index 0000000..4fdf6a1 --- /dev/null +++ b/Database/Functions/ToDateTimeOffset.sql @@ -0,0 +1,16 @@ +CREATE FUNCTION [Tzdb].[ToDateTimeOffset] +( + @time DATETIME2, + @tz VARCHAR(50) +) +RETURNS DATETIMEOFFSET +BEGIN + DECLARE @OffsetMinutes INT; + + SELECT TOP 1 @OffsetMinutes = [OffsetMinutes] + FROM [Tzdb].[Intervals] i + INNER JOIN Tzdb.GetZoneId_Inline(@tz) z ON i.ZoneId = z.ZoneId + WHERE LocalStart <= @time AND LocalEnd > @time; + + RETURN TODATETIMEOFFSET(@time, @OffsetMinutes); +END From 128c23938103cbc0a605b7970c35519224e6cd67 Mon Sep 17 00:00:00 2001 From: MaximoB Date: Tue, 28 Nov 2017 13:21:19 -0600 Subject: [PATCH 2/2] Add faster inline version of ToDateTimeOffset func --- Database/Database.sqlproj | 1 + Database/Functions/ToDateTimeOffset_Inline.sql | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 Database/Functions/ToDateTimeOffset_Inline.sql diff --git a/Database/Database.sqlproj b/Database/Database.sqlproj index ca40801..faffdcb 100644 --- a/Database/Database.sqlproj +++ b/Database/Database.sqlproj @@ -83,5 +83,6 @@ + \ No newline at end of file diff --git a/Database/Functions/ToDateTimeOffset_Inline.sql b/Database/Functions/ToDateTimeOffset_Inline.sql new file mode 100644 index 0000000..59f6032 --- /dev/null +++ b/Database/Functions/ToDateTimeOffset_Inline.sql @@ -0,0 +1,16 @@ +CREATE FUNCTION [Tzdb].[ToDateTimeOffset_Inline] +( + @time DATETIME2, + @tz VARCHAR(50) +) +RETURNS TABLE +WITH SCHEMABINDING +AS RETURN + SELECT TOP 1 + TODATETIMEOFFSET(@time, ntrvl.[OffsetMinutes]) + AS [Time] + FROM [Tzdb].[Intervals] ntrvl + WHERE ntrvl.[ZoneId] = (SELECT zn.[ZoneId] FROM [Tzdb].[GetZoneId_Inline](@tz) zn) + AND ntrvl.[LocalStart] <= @time + AND ntrvl.[LocalEnd] > @time; +GO