#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
.