2015-11-03 63 views
1

我只是想知道下面的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中的結果比較今天的日期。

回答

0

你可以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 
0

沒有理由再次蒙上了TIMESTAMP爲CHAR,然後回到TIMESTAMP。只需做

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