获取今天的日期 - 不同的时区

时间:2015-11-03 05:29:05

标签: sql oracle oracle11g timestamp-with-timezone

我只是想知道以下SQL是否适合将美国服务器时间转换为泰国日期。因为我们有12个小时的时间差异,而且时间早于美国时间

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

没有理由将TIMESTAMP转换为CHAR,然后再次返回TIMESTAMP。只需做

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