我只是想知道以下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中根据此结果比较今天的日期。
答案 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;