SQL Server - отображать EST как PST? - PullRequest
       0

SQL Server - отображать EST как PST?

0 голосов
/ 19 сентября 2019

Сервер находится в Нью-Йорке, а столбец даты (DateTime) заполняется как EST.Как пользователи в Калифорнии считают этот DateTime локальным PST?

Я пытался:

declare @dte DateTime = '20190919 10:01:01'
select @dte EST, @dte At Time Zone 'Pacific Standard Time' As PST

И я получаю

EST

2019-09-19 10:01:01.000 

PST

2019-09-19 10:01:01.000 -07:00

Я ищуна 2019-09-19 07: 01: 01.000 -07: 00

1 Ответ

2 голосов
/ 20 сентября 2019

Джероен уже сказал это в своем комментарии, но я делаю код конкретным, чтобы вы могли понять, что он имеет в виду.

Возьмите начальную дату, для которой вы знаете часовой пояс, но 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...