Получить сегодняшнюю дату - другой часовой пояс

Я просто хотел узнать, хорош ли следующий SQL для преобразования времени сервера США в дату в Таиланде. Поскольку у нас разница во времени 12 часов, а время TH опережает время США

SELECT TO_DATE(
               TO_CHAR(
                       SYSTIMESTAMP AT TIME ZONE 'Asia/Bangkok', 'yyyy-mm-dd', 
                      'NLS_DATE_LANGUAGE = american'), 'yyyy-mm-dd') AS TODAY
FROM dual;

Работает отлично. Но есть ли другой лучший способ конвертировать временную метку сервера из одного часового пояса в другой, так как мне нужно сравнить сегодняшнюю дату на основе этого результата в моем внешнем SQL.

2 ответа

Нет причин приводить TIMESTAMP к CHAR, а затем снова возвращаться к TIMESTAMP. Просто делай

SELECT SYSTIMESTAMP AT TIME ZONE 'Asia/Bangkok' AS TODAY 
FROM dual;

Вы можете CAST метку времени в желаемый часовой пояс.

Например,

SQL> WITH data AS (
  2  SELECT SYSTIMESTAMP AT TIME ZONE 'Asia/Bangkok' tm_bangkok FROM dual
  3  )
  4  SELECT tm_bangkok,
  5         CAST(tm_bangkok AT TIME ZONE 'EST' AS TIMESTAMP) tm_est
  6  FROM data;

TM_BANGKOK                                    TM_EST
--------------------------------------------- ----------------------------
03-NOV-15 12.54.18.951000 PM ASIA/BANGKOK     03-NOV-15 12.54.18.951000 AM
Другие вопросы по тегам