Джероен уже сказал это в своем комментарии, но я делаю код конкретным, чтобы вы могли понять, что он имеет в виду.
Возьмите начальную дату, для которой вы знаете часовой пояс, но SQL Server неи покажите ему часовой пояс в явном виде:
DECLARE @dte datetime = '20190919 10:01:01';
SELECT
@dte AT TIME ZONE 'Eastern Standard Time';
, который возвращает значение DATETIMEOFFSET
:
2019-09-19 10:01:01.000 -04:00
Затем преобразуйте это значение в тихоокеанское время, обернув его веще один AT TIME ZONE
:
DECLARE @dte datetime = '20190919 10:01:01';
SELECT
(@dte AT TIME ZONE 'Eastern Standard Time') AT TIME ZONE 'Pacific Standard Time' AS datetime;
, который возвращает еще один DATETIMEOFFSET
:
2019-09-19 07:01:01.000 -07:00
И последнее, но не менее важное, для целей презентации, оберните в вCAST
так что вы получите DATETIME
только для своих конечных пользователей:
DECLARE @dte datetime = '20190919 10:01:01';
SELECT
CAST((@dte AT TIME ZONE 'Eastern Standard Time') AT TIME ZONE 'Pacific Standard Time' AS datetime);
Результаты:
2019-09-19 07:01:01.000
И Боб твой дядя.
Конечно, если вы хотите использовать ленивый подход, DATEADD
приведет вас туда, где вы хотите быть тоже:
DECLARE @dte datetime = '20190919 10:01:01';
SELECT
DATEADD(HOUR, -3, @dte);
2019-09-19 07:01:01.000