`

Oracle与时间戳有关的函数

阅读更多

有很多函数可以用来查询和处理时间戳,表5-9中列出了这些函数。

 

 

       
CURRENT_TIMESTAMP() 返回一个 TIMESTAMP WITH TIME ZONE 类型的值,其中包括当前会话的日期和时间以及会话的时区
EXTRACT(

{ YEAR | MONTH | DAY |

HOUR | MINUTE | SECOND } |

{ TIMEZONE_HOUR |

TIMEZONE_MINUTE } |

{ TIMEZONE_REGION | }

TIMEZONE_ABBR }

FROM x)
从x中提取并返回年、月、日、时、分、秒或时区,其中x可以是时间戳类型或DATE类型
FROM_TZ( x, time_zone) 将TIMESTAMP类型的x转换为由time_zone指定的时区,并返回TIMESTAMP WITH TIMEZONE类型。time_zone必须被指定为+|- HH:MI格式的字符串。此函数一般将x和time_zone合并成一个值
LOCALTIMESTAMP 返回一个TIMESTAMP 类型,其中包含会话的当前日期和时间
SYSTIMESTAMP 返回一个TIMESTAMP WITH TIME ZONE类型,其中包括数据库的当前日期、时间,以及数据库时区
SYS_EXTRACT_UTC(x) 将TIMESTAMP WITH TIMEZONE类型的x转换为一个TIMESTAMP类型,其中包含了UTC时区中的日期和时间
TO_TIMESTAMP(x, [format]) 将字符串x转换为一个TIMESTAMP类型,还可以为x指定一个可选的参数format
TO_TIMESTAMP_TZ(x, [format]) 将字符串x转换为一个TIMESTAMP WITH TIMEZONE类型,还可以为x指定一个可选的参数format

 

 

1. CURRENT_TIMESTAMP、LOCALTIMESTAMP和SYSTIMESTAMP

下面这个查询同时调用了CURRENT_TIMESTAMP、LOCALTIMESTAMP和SYSTIMESTAMP函数(我的会话时区和数据库时区都是PST,它比UTC晚8小时):

SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP, SYSTIMESTAMP
FROM dual;
CURRENT_TIMESTAMP
-----------------------------------
LOCALTIMESTAMP
-----------------------------------
SYSTIMESTAMP
-----------------------------------
05-NOV-07 12.15.32.734000 PM PST
05-NOV-07 12.15.32.734000 PM
05-NOV-07 12.15.32.734000 PM -08:00

 

如果将TIME_ZONE设置为EST,并重新执行上面这个查询,就会得到如下输出结果:

ALTER SESSION SET TIME_ZONE = 'EST';

Session altered.

SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP, SYSTIMESTAMP
FROM dual;

CURRENT_TIMESTAMP
-----------------------------------------------------------
LOCALTIMESTAMP
-----------------------------------------------------------
SYSTIMESTAMP
-----------------------------------------------------------
05-NOV-07 03.19.57.562000 PM EST
05-NOV-07 03.19.57.562000 PM
05-NOV-07 12.19.57.562000 PM -08:00

 

下面这条语句将会话时区设置会PST:

 

ALTER SESSION SET TIME_ZONE = 'PST';

Session altered.

 

2. EXTRACT函数

 

    EXTRACT函数用于从x中提取并返回年、月、日、时、分、秒或时区,其中x可以是时间戳类型或DATE类型。下面这个查询使用EXTRACT函数从由TO_DATE()返回的DATE类型中提取年、月、日:

 SELECT
EXTRACT(YEAR FROM TO_DATE('01-JAN-2008 19:15:26',
'DD-MON-YYYY HH24:MI:SS')) AS YEAR,
EXTRACT(MONTH FROM TO_DATE('01-JAN-2008 19:15:26',
'DD-MON-YYYY HH24:MI:SS')) AS MONTH,
EXTRACT(DAY FROM TO_DATE('01-JAN-2008 19:15:26',
'DD-MON-YYYY HH24:MI:SS')) AS DAY
FROM dual;

       YEAR       MONTH           DAY
---------- ---------- ----------
 2008            1             1
 



    下面这个查询使用EXTRACT函数从由TO_TIMESTAMP()返回的TIMESTAMP类型中提取时、分、秒:

 SELECT
EXTRACT(HOUR FROM TO_TIMESTAMP('01-JAN-2008 19:15:26',
'DD-MON-YYYY HH24:MI:SS')) AS HOUR,
EXTRACT(MINUTE FROM TO_TIMESTAMP('01-JAN-2008 19:15:26',
'DD-MON-YYYY HH24:MI:SS')) AS MINUTE,
EXTRACT(SECOND FROM TO_TIMESTAMP('01-JAN-2008 19:15:26',
'DD-MON-YYYY HH24:MI:SS')) AS SECOND
FROM dual;

      HOUR       MINUTE       SECOND
---------- ---------- ----------
19            15            26
 



    最后这个查询使用EXTRACT函数从由TO_TIMESTAMP_TZ()返回的TIMESTAMP WITH TIMEZONE类型中提取时区的时、分、秒、区域和时区缩写:

 SELECT
EXTRACT(TIMEZONE_HOUR FROM TO_TIMESTAMP_TZ(
'01-JAN-2008 19:15:26 -7:15', 'DD-MON-YYYY HH24:MI:SS TZH:TZM'))
AS TZH,
EXTRACT(TIMEZONE_MINUTE FROM TO_TIMESTAMP_TZ(
'01-JAN-2008 19:15:26 -7:15', 'DD-MON-YYYY HH24:MI:SS TZH:TZM'))
AS TZM,
EXTRACT(TIMEZONE_REGION FROM TO_TIMESTAMP_TZ(
'01-JAN-2008 19:15:26 PST', 'DD-MON-YYYY HH24:MI:SS TZR'))
AS TZR,
EXTRACT(TIMEZONE_ABBR FROM TO_TIMESTAMP_TZ(
'01-JAN-2008 19:15:26 PST', 'DD-MON-YYYY HH24:MI:SS TZR'))
AS TZA
FROM dual;

        TZH          TZM   TZR                   TZA
---------- ---------- ----------- ----------
  -7          -15   PST                    PST
 



3. FROM_TZ()

    FROM_TZ(x, time_zone)将TIMESTAMP类型的x转换为由time_zone指定的时区,并返回TIMESTAMP WITH TIMEZONE类型。time_zone必须被指定为+|- HH:MI格式的字符串。此函数一般将x和time_zone合并成一个值。

    例如,下面这个查询将时间戳2008-05-13 07:15:31.1234和与UTC的时差-7:00合并起来:

 SELECT FROM_TZ(TIMESTAMP '2008-05-13 07:15:31.1234', '-7:00')
FROM dual;

FROM_TZ(TIMESTAMP'2008-05-1307:15:31.1234','-7:00')
---------------------------------------------------
13-MAY-08 07.15.31.123400000 AM -07:00
 



4. SYS_EXTRACT_UTC()

    SYS_EXTRACT_UTC (x)用于将TIMESTAMP WITH TIMEZONE类型的x转换为一个包含UTC时区日期和时间的TIMESTAMP类型。

    下面这个查询将2008-11-17 19:15:26 PST转换为UTC:

 SELECT SYS_EXTRACT_UTC(TIMESTAMP '2008-11-17 19:15:26 PST')
FROM dual;

SYS_EXTRACT_UTC(TIMESTAMP'2008-11-1719:15:26PST')
-------------------------------------------------
18-NOV-08 03.15.26.000000000 AM
 



    因为在冬季PST比UTC晚8个小时,因此这个查询返回的TIMESTAMP类型的值比2008-11-17 19:15:26 PST早了8个小时,即18-NOV-08 03.15.26 AM.。

    如果是在夏季,则返回的TIMESTAMP类型的值只比UTC早7个小时。

 SELECT SYS_EXTRACT_UTC(TIMESTAMP '2008-05-17 19:15:26 PST')
FROM dual;

SYS_EXTRACT_UTC(TIMESTAMP'2008-05-1719:15:26PST')
-------------------------------------------------
18-MAY-08 02.15.26.000000000 AM

 

5. TO_TIMESTAMP()

    TO_TIMESTAMP(x,[format])用于将字符串x(可能是CHAR、VARCHAR2、NCHAR或NVARCHAR2)转换为一个TIMESTAMP类型,该函数中可以为x指定可选的参数format。

    下面这个查询将字符串2005-05-13 07:15:31.1234转换为TIMESTAMP类型,格式为YYYY-MM-DD HH24:MI:SS.FF:

 SELECT TO_TIMESTAMP('2008-05-13 07:15:31.1234', 'YYYY-MM-DD HH24:MI:SS.FF')
FROM dual;

TO_TIMESTAMP('2008-05-1307:15:31.1234','YYYY-MM-DDHH24:MI:SS.FF')
-----------------------------------------------------------------
13-MAY-08 07.15.31.123400000 AM
 



6. TO_TIMESTAMP_TZ()


    TO_TIMESTAMP_TZ(x,[ format ])用于将字符串x转换为一个TIMESTAMP WITH TIMEZONE类型,该函数中可以为x指定可选的参数format。

    下面这个查询向TO_TIMESTAMP_TZ函数传递时区PST(在格式字符串中使用TZR来识别):

 SELECT TO_TIMESTAMP_TZ('2008-05-13 07:15:31.1234 PST',
'YYYY-MM-DD HH24:MI:SS.FF TZR')
FROM dual;

TO_TIMESTAMP_TZ('2008-05-1307:15:31.1234PST','YYYY-MM-DDHH24:MI:SS.FFTZR')
--------------------------------------------------------------------------
13-MAY-08 07.15.31.123400000 AM PST
 



    下面这个查询使用与UTC的时差 -7:00(-7:00在格式字符串中用TZR和TZM来识别):

SELECT TO_TIMESTAMP_TZ('2008-05-13 07:15:31.1234 -7:00',

 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')
FROM dual;

TO_TIMESTAMP_TZ('2008-05-1307:15:31.1234-7:00','YYYY-MM-DDHH24:MI:SS.FFTZH
--------------------------------------------------------------------------
13-MAY-08 07.15.31.123400000 AM -07:00
 


7. 将字符串转换为TIMESTAMP WITH LOCAL TIME ZONE


    使用CAST函数可以将一个字符串转换为TIMESTAMP WITH LOCAL TIME ZONE。第4章曾介绍过CAST(),回想一下,CAST(x AS type)将x转换为由type指定的兼容的数据库类型。

    下面这个查询使用CAST()将字符串13-JUN-08转换为TIMESTAMP WITH LOCAL TIME ZONE:

 SELECT CAST('13-JUN-08' AS TIMESTAMP WITH LOCAL TIME ZONE)
FROM dual;

CAST('13-JUN-08'ASTIMESTAMPWITHLOCALTIMEZONE)
---------------------------------------------
13-JUN-08 12.00.00.000000 AM
 



    此查询返回的时间戳包含日期2008年6月13日和时间12 A.M.。

    下面这个查询使用CAST()将一个更复杂的字符串转换为TIMESTAMP WITH LOCAL TIME ZONE:

 SELECT CAST(TO_TIMESTAMP_TZ('2008-05-13 07:15:31.1234 PST',
'YYYY-MM-DD HH24:MI:SS.FF TZR') AS TIMESTAMP WITH LOCAL TIME ZONE)
FROM dual;

CAST(TO_TIMESTAMP_TZ('2008-05-1307:15:31.1234PST','YYYY-MM-DDHH24:MI:SS.FF
--------------------------------------------------------------------------
13-MAY-08 06.15.31.123400 AM
 



    此查询返回的时间戳包含日期2008年5月13日和时间6:15:31.1234 AM PST(PST是数据库时区和会话时区)。

    下面这个查询与上面的查询做相同的事情,只是时区是EST:

 SELECT CAST(TO_TIMESTAMP_TZ('2008-05-13 07:15:31.1234 EST',
'YYYY-MM-DD HH24:MI:SS.FF TZR') AS TIMESTAMP WITH LOCAL TIME ZONE)
FROM dual;

CAST(TO_TIMESTAMP_TZ('2008-05-1307:15:31.1234EST','YYYY-MM-DDHH24:MI:SS.FF
--------------------------------------------------------------------------
13-MAY-08 04.15.31.123400 AM
 



    此查询返回的时区包含日期2008年3月13日和时间4:15:31.1234 AM PST(因为PST比EST晚3小时,所以此时间戳返回的时间比实际查询的时间早3小时)。

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    oracle中日期类型与unix 时间戳的转换

    oracle中日期类型与unix 时间戳的转换, Unix时间戳记是从'1970-01-01 00:00:00'GMT开始的秒数,表现为整数型。 Oracle中的时间是Date型,以下函数提供了两种时间转换的Oracle函数 --unix时间戳与date时间互转 ...

    oracle数据库实现获取时间戳的无参函数

    主要介绍了oracle数据库实现获取时间戳的无参函数的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

    oracle迁移达梦常见问题汇总

    其中主要棘手的在与迁移函数包等对象时的问题。 2、迁移错误详解 2.1、通用问题 说明:对于直接使用DTS迁移失败的包,最好从源端获取完整的定义,重新核查报错原因 —— 避免编译通过后,报错 xxx 对象未在 xxx ...

    Oracle日期函数简介

    Oracle日期函数用于对Oracle数据库中的日期及时间进行处理,下面就为您详细介绍Oracle日期函数的用法,希望对您能有所启迪。 (1)SYSDATE和TRUNC 两个Oracle日期函数取Oracle服务器系统的日期和截掉小数部分的功能...

    ORACLE中查找定位表最后DML操作的时间小结

    然后通过SCN_TO_TIMESTAMP函数可以将SCN转换为时间戳,从而找到最后DML操作时SCN的对应时间。但是,默认情况下,每行记录的ORA_ROWSCN是基于Block的,除非在建表的时候开启行级跟踪。 SELECT MAX(ORA_ROWSCN), SCN_...

    如何在Oracle 9i中正确转换时区

    在Oracle9i之前,虽然有一个NEW_TIME函数可以改变DATE的时间戳部分,但是还没有专门用来存储时区信息的数据类型。在Oracle9i中,我们可以使用DBTIMEZONE伪字段查询数据库的时区,使用 SESSIONTIMEZONE伪字段查询会话...

    Oracle Database 11g初学者指南--详细书签版

    在技术会议和用户组会议上她乐于展现和分享有关Oracle数据库主题的思想.她的Email是michelle_malcher@ioug.org. 目录 封面 -14 封底 -13 扉页 -12 版权 -11 关于作者 -10 前言 -8 目录 -5 第1章 数据库基础 1 1.1 ...

    《Oracle Database编程指南》13-03:日期时间函数(Datetime Functions)

    日期时间函数(Datetime Functions)操作日期(date)、时间戳(timestamp,带有时区的时间戳,以及带有本地时区的时间戳)和interval(从天到秒的时间间隔,从年到月的时间间隔)值。 有些日期时间函数是为Oracle DATE...

    oracle数据库11G初学者指南.Oracle.Database.11g,.A.Beginner's.Guide

    注意——与所介绍主题相关的额外信息 章节测验——每章结束时的测验测试读者对所学知识的掌握程度。 目录 第1章 数据库基础 1.1 数据库定义 1.2 Ofacle Database 11g的体系结构 1.2.1 控制文件 1.2.2 联机重做日志...

    oracle获取当前时间,精确到毫秒并指定精确位数的实现方法

    oracle获得当前时间的,精确到毫秒 可以指定精确豪秒的位数 select to_char(systimestamp, ‘yyyymmdd hh24:mi:ss.ff ‘) from dual;–20120516 11:56:40.729083 select to_char(systimestamp, ‘yyyymmdd hh24:mi:...

    Direct Oracle Access v4.1.3 bcb6

    除了以上提及的特性之外,还支持Oracle 8和Oracle 8i特性,如LOB定位、对象和参考、XML TYPE、时间戳、滚动查询、密码到期、外部程序开发以及MTS Oracle服务等。 主要功能: 按范例查询模式 ——TOracleDataSet组件...

    Oracle PL/SQL程序设计(第5版)(下册)第二部分

    《Oracle PL/SQL程序设计(第5版)》结构清晰,示例丰富,实践性强,适用于Oracle数据库开发人员、Oracle数据库管理员等相关数据库从业人员,也可以作为各大、中专院校相关专业师生的参考用书和相关培训机构的培训...

    Oracle PL/SQL程序设计(第5版)(下册) 第一部分

    《Oracle PL/SQL程序设计(第5版)》结构清晰,示例丰富,实践性强,适用于Oracle数据库开发人员、Oracle数据库管理员等相关数据库从业人员,也可以作为各大、中专院校相关专业师生的参考用书和相关培训机构的培训...

    oracle 日期函数集合(集中版本)第1/2页

    在oracle数据库的开发中,常因为时间的问题大费周章,所以特地将ORACLE数据的日期函数收藏致此。乃供他日所查也。 add_months(d,n) 日期d加n个月 last_day(d) 包含d的月?的最后一天的日期 new_time(d,a,b) a?区的...

    Oracle关于时间/日期的操作

    在oracle中有很多关于日期的函数,如:  1、add_months()用于从一个日期值增加或减少一些月份  date_value:=add_months(date_value,number_of_months)  例:  SQL> select add_months(sysdate,12) “Next Year” ...

    数据库SCN和时间的互相转换

    说明:SCN(System Change Number 简称 SCN)是当Oracle数据库更新后,由DBMS自动维护去累积递增的一个数字,可以理解成ORACLE数据库的时间戳,从ORACLE 10G开始,提供了函数可以实现SCN和时间进行相互转换;...

    程序员的SQL金典6-8

     5.3.1 日期、时间、日期时间与时间戳  5.3.2 主流数据库系统中日期时间类型的表示方式  5.3.3 取得当前日期时间  5.3.4 日期增减  5.3.5 计算日期差额  5.3.6 计算一个日期是星期几  5.3.7 取得日期的指定...

    程序员的SQL金典7-8

     5.3.1 日期、时间、日期时间与时间戳  5.3.2 主流数据库系统中日期时间类型的表示方式  5.3.3 取得当前日期时间  5.3.4 日期增减  5.3.5 计算日期差额  5.3.6 计算一个日期是星期几  5.3.7 取得日期的指定...

    程序员的SQL金典4-8

     5.3.1 日期、时间、日期时间与时间戳  5.3.2 主流数据库系统中日期时间类型的表示方式  5.3.3 取得当前日期时间  5.3.4 日期增减  5.3.5 计算日期差额  5.3.6 计算一个日期是星期几  5.3.7 取得日期的指定...

Global site tag (gtag.js) - Google Analytics