Oracle的TIMESTAMP类型比DATE类型不只是多了一个毫秒信息,TIMESTAMP类型还包括一个时区的信息。
看看SYSTIMESTAMP类型:
SQL> SELECT SYSTIMESTAMP FROM DUAL;
SYSTIMESTAMP
-----------------------------------------------
07-3月 -09 11.30.02.125000 下午 +08:00
在SYSTIMESTAMP结果的最后部分的+08:00,就是TIMESTAMP类型的时区信息。由于数据库服务器选择了北京时间,也就是东8区,所以这里显示的是+08:00。
时区对应的日期标识分别是TZH和TZM,表示时区的小时和时区的分钟信息:
SQL> SELECT TO_TIMESTAMP_TZ('2009-3-7 23:15:23.23 +04:00',
2 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')
3 FROM DUAL;
TO_TIMESTAMP_TZ('2009-3-723:15:23.23+04:00','YYYY-MM-DDHH24:MI:SS.FFTZH:TZM
---------------------------------------------------------------------------
07-3月 -09 11.15.23.230000000 下午 +04:00
除了这种数值表示之外,时区还可以用文字来表示,V$TIMEZONE_NAMES视图中包括数据库支持的所有的时区名称以及其对应的简称。
SQL> COL TZNAME FORMAT A40
SQL> COL TZABBREV FORMAT A30
SQL> SELECT * FROM V$TIMEZONE_NAMES
2 WHERE ROWNUM < 20;
TZNAME TZABBREV
---------------------------------------- -----------------------
Africa/Algiers LMT
Africa/Algiers PMT
Africa/Algiers WET
Africa/Algiers WEST
Africa/Algiers CET
Africa/Algiers CEST
Africa/Cairo LMT
Africa/Cairo EET
Africa/Cairo EEST
Africa/Casablanca LMT
Africa/Casablanca WET
Africa/Casablanca WEST
Africa/Casablanca CET
Africa/Ceuta LMT
Africa/Ceuta WET
Africa/Ceuta WEST
Africa/Ceuta CET
Africa/Ceuta CEST
Africa/Djibouti LMT
已选择19行。
Oracle提供了一个函数TZ_OFFSET可以返回一个时区名称对应的数值类型的时区范围:
SQL> SELECT TZNAME, TZABBREV, TZ_OFFSET(TZNAME)
2 FROM V$TIMEZONE_NAMES
3 WHERE ROWNUM < 20;
TZNAME TZABBREV TZ_OFFS
---------------------------------------- ------------------------------ -------
Africa/Algiers LMT +01:00
Africa/Algiers PMT +01:00
Africa/Algiers WET +01:00
Africa/Algiers WEST +01:00
Africa/Algiers CET +01:00
Africa/Algiers CEST +01:00
Africa/Cairo LMT +02:00
Africa/Cairo EET +02:00
Africa/Cairo EEST +02:00
Africa/Casablanca LMT +00:00
Africa/Casablanca WET +00:00
Africa/Casablanca WEST +00:00
Africa/Casablanca CET +00:00
Africa/Ceuta LMT +01:00
Africa/Ceuta WET +01:00
Africa/Ceuta WEST +01:00
Africa/Ceuta CET +01:00
Africa/Ceuta CEST +01:00
Africa/Djibouti LMT +03:00
已选择19行。
这种字符类型的时区表示方法也是可以用在TIMESTAMP类型中的,其对应的日期标识为TZR:
SQL> SELECT TO_TIMESTAMP_TZ(
2 '2009-3-7 23:34:45.2134 Etc/GMT-8',
3 'YYYY-MM-DD HH24:MI:SS.FF TZR')
4 FROM DUAL;
TO_TIMESTAMP_TZ('2009-3-723:34:45.2134ETC/GMT-8','YYYY-MM-DDHH24:MI:SS.FFTZ
---------------------------------------------------------------------------
07-3月 -09 11.34.45.213400000 下午 ETC/GMT-8
SQL> SELECT TO_CHAR(
2 TO_TIMESTAMP_TZ(
3 '2009-3-7 23:34:45.2134 Etc/GMT-8',
4 'YYYY-MM-DD HH24:MI:SS.FF TZR'),
5 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')
6 FROM DUAL;
TO_CHAR(TO_TIMESTAMP_TZ('2009-3-723:
------------------------------------
2009-03-07 23:34:45.213400000 +08:00
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-563216/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-563216/