Как вернуть Datetimeoffset в представлении SQL, используя часовой пояс - PullRequest
0 голосов
/ 21 октября 2019

возможно ли вернуть значение из таблицы типа datetime в качестве datetimeoffset в представлении, использующем AT TIME ZONE?

Когда я пытаюсь это сделать с помощью

CREATE VIEW TESTVIEW AS SELECT appointment_start AT TIME ZONE 'central european standard time' AS x FROM dbo.Appointments

результат, как и ожидалось, но когда я открываю представление в SQL Management Studio, я получаю сообщение «Невозможно разобрать текст запроса».

То же самое, когда я пытаюсь что-то вроде SELECT TODATETIMEOFFSET(appointment_start, DATEPART(tz, appointment_start AT TIME ZONE 'central european standard time')) as y FROM dbo.Appointments

Как получить значение datetime, преобразованное в datetimeoffset с использованием AT TIME ZONE в представлении SQL?

EDIT: Когда я дополнительно выбираю другой столбец из таблицы, я также получаю ожидаемый результат,но SQL Management Studio жалуется </p> <p>SELECT id, appointment_start AT TIME ZONE 'central european standard time' AS x FROM dbo.Appointments

Error in SELECT clause: expression near 'TIME'. Missing FROM clause. Error in list of function arguments: 'AT' not recognized. Unable to parse query text.

Большое спасибо

1 Ответ

0 голосов
/ 24 октября 2019

Для кого это может касаться: Решить это с помощью функции SQL.

Возможно, это не самый элегантный способ, но, похоже, он работает.

CREATE FUNCTION [dbo].[TODATETIMEOFFSETINTIMEZONE] ( @Date AS DateTime, @Timezone as NVARCHAR(100) ) RETURNS DateTimeoffset AS BEGIN DECLARE @NewDate As DateTimeoffset SELECT @NewDate = @Date AT TIME ZONE @Timezone RETURN @NewDate END GO

И в представлении SQL

SELECT id, TODATETIMEOFFSETINTIMEZONE(appointment_start, N'W. Europe Standard Time') AS appointment_start FROM dbo.Appointments

...