Azure SQL — Преобразование часового пояса в «Центральное стандартное время»?

#sql #azure #timezone #offset

Вопрос:

Серверное время «UTC» и не может быть изменено из-за того, что моя база данных является Azure SQL. Я знаю, что вы можете перейти в другие часовые пояса. Однако я не уверен, как это правильно применить.

Короче говоря. Мне нужно уметь тянуть и работать на основе «даты начала», но по Центральному стандартному времени.

Я прокомментировал, где я пробовал некоторые вещи. Моя проблема в том, что я не уверен, как применить смещение к «Дате начала» для того, что возвращается в интерфейсе.

Оператор » ГДЕ «технически работает только для возврата «Сегодняшних заданий», однако возвращается на основе времени UTC, которое не будет работать для людей, использующих это в Центральном стандартном часовом поясе. Как мне это правильно компенсировать?

Большая благодарность за помощь.

 begin
--declare @dto datetimeoffset = switchoffset (CONVERT(datetimeoffset, GETDATE()), '-6:00');
--DECLARE @dto datetimeoffset
--SET @dto = (SELECT GETUTCDATE() AT TIME ZONE 'Central Standard Time')
--SELECT SWITCHOFFSET(SYSDATETIMEOFFSET(), '-05:00')

declare @today datetimeoffset;
--set @today = switchoffset (convert(time, getdate()), '-05:00');
set @today = getdate();

SELECT dbo.Projects.ProjectID, dbo.Projects.ProjectName, dbo.Jobs.JobID, dbo.Jobs.Status, dbo.Jobs.StartDate, dbo.Jobs.EndDate, dbo.Jobs.CompletedDate, dbo.JobType.JobTypeID, dbo.JobType.JobTypeDescription
FROM dbo.Jobs INNER JOIN dbo.Projects ON dbo.Jobs.ProjectID = dbo.Projects.ProjectID
INNER JOIN dbo.JobType ON dbo.Jobs.JobTypeID = dbo.JobType.JobTypeID

WHERE convert(varchar(10), StartDate, 102) 
    = convert(varchar(10), @today, 102)

ORDER BY JobID DESC

End
 

Ответ №1:

База данных SQL Azure всегда следует за UTC. Используйте ЧАСОВОЙ ПОЯС в базе данных SQL Azure, если вам нужно преобразовать информацию о дате и времени в часовом поясе, отличном от UTC.

В ЧАСОВОМ ПОЯСЕ преобразует входную дату в целевой часовой пояс. Он возвращает значение datetimeoffset в целевом часовом поясе.

Запрос:

 declare @current_cst datetimeoffset;
set @current_cst = (SELECT getdate() AT TIME ZONE 'UTC' AT TIME ZONE 'Central Standard Time')

declare @current_utc datetimeoffset;
set @current_utc = getutcdate();

--retunrs datetimeoffset format
select @current_utc current_utc, @current_cst current_cst 

--retunrs 102 format(yyyy.mm.dd)
select convert(varchar(10), @current_utc, 102) as current_utc, convert(varchar(10), @current_cst, 102) as current_cst 
 

введите описание изображения здесь

Примечание.В поле зрения доступен список установленных часовых поясов sys.time_zone_info .

введите описание изображения здесь