TIMESTAMP的時區轉換
TIMESTAMP既然包括了時區的概念,就會碰到將一個時區的時間轉換到另一個數區的問題。
在時區轉換之前,首先描述一下如何指定一個包含時區的TIMESTAMP,常用方法有以下幾種:
SQL> SELECT SYSTIMESTAMP FROM DUAL;
SYSTIMESTAMP
-------------------------------------------------------------------
09-3月 -09 05.37.29.468000 下午 +08:00
SQL> SELECT SYSTIMESTAMP + INTERVAL '5' HOUR FROM DUAL;
SYSTIMESTAMP+INTERVAL'5'HOUR
-------------------------------------------------------------------
09-3月 -09 10.38.02.000000000 下午 +08:00
對於伺服器當前時區的時間,可以透過SYSTIMESTAMP加減INTERVAL的方式實現。
第二種方法使用TO_TIMESTAMP_TZ:
SQL> SELECT TO_TIMESTAMP_TZ('2009-3-9 17:51:23.23 -05:00',
2 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')
3 FROM DUAL;
TO_TIMESTAMP_TZ('2009-3-917:51:23.23-05:00','YYYY-MM-DDHH24:MI:SS.FFTZH:TZM
---------------------------------------------------------------------------
09-3月 -09 05.51.23.230000000 下午 -05:00
Oracle還提供一個FROM_TZ的函式,用來轉換一個TIMESTAMP型別到TIMESTAMP WITH TIME ZONE型別:
SQL> SELECT FROM_TZ(CAST(SYSDATE AS TIMESTAMP), '-11:00')
2 FROM DUAL;
FROM_TZ(CAST(SYSDATEASTIMESTAMP),'-11:00')
--------------------------------------------------------------
09-3月 -09 05.44.18.000000 下午 -11:00
當然還可以透過TIMESTAMP加字串的方式來直接指定一個包含時區的TIMESTAMP型別:
SQL> SELECT TIMESTAMP '2009-3-9 17:56:53.232323 +10:00'
2 FROM DUAL;
TIMESTAMP'2009-3-917:56:53.232323+10:00'
----------------------------------------------------------
09-3月 -09 05.56.53.232323000 下午 +10:00
最後可以使用TIMESTAMP AT TIME ZONE的方式指定時區:
SQL> SELECT TIMESTAMP '2009-3-9 17:56:53.232323'
2 AT TIME ZONE 'GMT'
3 FROM DUAL;
TIMESTAMP'2009-3-917:56:53.232323'ATTIMEZONE'GMT'
-----------------------------------------------------
09-3月 -09 09.56.53.232323000 上午 GMT
SQL> SELECT TO_CHAR(
2 TIMESTAMP '2009-3-9 17:56:53.232323'
3 AT TIME ZONE 'GMT'
4 , 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')
5 FROM DUAL;
TO_CHAR(TIMESTAMP'2009-3-917:56:53.2
------------------------------------
2009-03-09 09:56:53.232323000 +00:00
而Oracle的最後這種方式,不僅支援時區名稱方式,而且支援時區的轉換。
比如希望將東4區時間轉換為西3區的時間:
SQL> SELECT TIMESTAMP '2009-3-9 18:05:23.234 +04:00'
2 AT TIME ZONE '-03:00'
3 FROM DUAL;
TIMESTAMP'2009-3-918:05:23.234+04:00'ATTIMEZONE'-03:00'
---------------------------------------------------------------------
09-3月 -09 11.05.23.234000000 上午 -03:00
SQL> SELECT FROM_TZ(CAST(SYSDATE AS TIMESTAMP), 'Asia/Shanghai')
2 AT TIME ZONE 'GMT'
3 FROM DUAL;
FROM_TZ(CAST(SYSDATEASTIMESTAMP),'ASIA/SHANGHAI')ATTIMEZONE'GMT'
---------------------------------------------------------------------
09-3月 -09 09.54.10.000000 上午 GMT
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-566477/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Timestamp-時間戳轉換時間戳
- MySQL:一次timestamp時區轉換導致的問題MySql
- String和Date、Timestamp之間的轉換
- 如何將UTC時間轉換為Unix時間戳(How to convert UTC time to unix timestamp)時間戳
- 時間戳與時間字串的多時區轉換時間戳字串
- 處理日期和時區轉換:為什麼正確的 UTC 轉換很重要
- 使用 Go 語言進行多時區時間轉換Go
- [時間格式的轉換]
- MySQL中datetime和timestamp的區別MySql
- Oracle中Date和Timestamp的區別Oracle
- 時間轉換
- 大資料Spark Sql中日期轉換FROM_UNIXTIME和UNIX_TIMESTAMP的使用大資料SparkSQL
- Rust中如何將本地時間轉換為另一個時區?Rust
- 使用pytz模組進行時區轉換及時間計算
- 掌握時間與空間:深入探討Golang中的時間戳與時區轉換Golang時間戳
- unix時間轉換為datetimedatetime轉換為unixtime
- C#操作時區轉換時遇到的一些問題和解決方法分享C#
- python中的時間轉換,秒級時間戳轉string,string轉時間Python時間戳
- Goland 時間轉換的那些事GoLand
- fastjson轉換json時,碰到的那些首字母大小寫轉換的坑!ASTJSON
- MSSQL-從字串轉換日期和/或時間時,轉換失敗SQL字串
- 工具方法:時間轉換
- 轉換UTC時間格式
- Java之時間轉換Java
- Gson轉換與JSONObject區別JSONObject
- SpringMVC的亂碼與時間轉換SpringMVC
- XHTML?它與 HTML的區別?如何轉換HTML
- 時間相減和時間轉換
- Python秒轉換成時間(時分秒)Python
- Excel中時間戳轉換時間Excel時間戳
- c++時間形式轉換C++
- JavaScript 轉換成UTC時間JavaScript
- JavaScript 時間日期格式轉換JavaScript
- QXMySQL 中 datetime 和 timestamp 的區別與選擇lypMySql
- ffmpeg裡的時間計算和轉換
- js 轉換時間戳的寫法ScriptJS時間戳
- TIMESTAMP和TIMESTAMP WITH TIME ZONE之間的總結
- python時間戳和時間字串的各種轉換Python時間戳字串
- Oracle 12CR2查詢轉換之臨時錶轉換Oracle