150 likes | 337 Views
Oracle9 i/10g 日期时间函数. 目标. 完成本课后, 您应当能够使用下面的日期时间函数: TZ_OFFSET CURRENT_DATE CURRENT_TIMESTAMP LOCALTIMESTAMP DBTIMEZONE SESSIONTIMEZONE EXTRACT FROM_TZ TO_TIMESTAMP TO_TIMESTAMP_TZ TO_YMINTERVAL. 时区. +07:00. -08:00. +02:00. +10:00. -05:00. 图中表示当格林尼治时间是 12:00 时,其它时区的时间。.
E N D
目标 完成本课后, 您应当能够使用下面的日期时间函数: • TZ_OFFSET • CURRENT_DATE • CURRENT_TIMESTAMP • LOCALTIMESTAMP • DBTIMEZONE • SESSIONTIMEZONE • EXTRACT • FROM_TZ • TO_TIMESTAMP • TO_TIMESTAMP_TZ • TO_YMINTERVAL
时区 +07:00 -08:00 +02:00 +10:00 -05:00 图中表示当格林尼治时间是 12:00 时,其它时区的时间。
Oracle9i 日期时间支持 • 在 Oracle9i 中,你能够在你的日期和时间数据中包含时区,并且提供对小数秒的支持 • 3 中新的日期时间数据类型: • TIMESTAMP • TIMESTAMP WITH TIME ZONE (TSTZ) • TIMESTAMP WITH LOCAL TIME ZONE (TSLTZ) • Oracle9i服务器提供对日期时间数据类型的夏令时支持
SELECT TZ_OFFSET('US/Eastern') FROM DUAL; TZ_OFFSET • 显示对时区 'US/Eastern'的时区偏移量 • 显示对时区 'Canada/Yukon'的时区偏移量 SELECT TZ_OFFSET('Canada/Yukon') FROM DUAL; • 显示对时区 'Europe/London'的时区偏移量 SELECT TZ_OFFSET('Europe/London') FROM DUAL;
ALTER SESSION SET TIME_ZONE = '-5:0'; SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL; ALTER SESSION SET TIME_ZONE = '-8:0';SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL; CURRENT_DATE • 显示在会话时区中的当前日期和时间 ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS'; • CURRENT_DATE对于会话时区是敏感的 • 在罗马日历中返回值是日期
CURRENT_TIMESTAMP • 显示在会话时区中的当前日期和时间,包含小数秒 ALTER SESSION SET TIME_ZONE = '-5:0'; SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL; • CURRENT_TIMESTAMP对于会话时区是敏感的 • 返回值是TIMESTAMP WITH TIME ZONE数据类型 ALTER SESSION SET TIME_ZONE = '-8:0'; SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;
LOCALTIMESTAMP • 以 TIMESTAMP数据类型的值显示在会话时区中的当前日期和时间 ALTER SESSION SET TIME_ZONE = '-5:0';SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM DUAL; ALTER SESSION SET TIME_ZONE = '-8:0'; SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM DUAL; • LOCALTIMESTAMP返回一个TIMESTAMP值,而CURRENT_TIMESTAMP返回一个TIMESTAMP WITH TIME ZONE 值
DBTIMEZONE和SESSIONTIMEZONE • 显示数据库时区的值 SELECT DBTIMEZONE FROM DUAL; • 显示会话时区的值 SELECT SESSIONTIMEZONE FROM DUAL;
SELECT last_name, hire_date, EXTRACT (MONTH FROM HIRE_DATE) FROM employees WHERE manager_id = 100; EXTRACT • 从 SYSDATE中显示年 SELECT EXTRACT (YEAR FROM SYSDATE) FROM DUAL; • 从 HIRE_DATE中显示 MANAGER_ID是100的雇员的月
SELECT FROM_TZ(TIMESTAMP '2000-03-28 08:00:00', 'Australia/North') FROM DUAL; 用FROM_TZ转换 TIMESTAMP • 显示TIMESTAMP值'2000-03-28 08:00:00' 作为一个TIMESTAMP WITH TIME ZONE值 SELECT FROM_TZ(TIMESTAMP '2000-03-28 08:00:00','3:00') FROM DUAL; • 对于时区 'Australia/North' 显示TIMESTAMP值'2000-03-28 08:00:00'作为一个TIMESTAMP WITH TIME ZONE值
用TO_TIMESTAMP和TO_TIMESTAMP_TZ转换 STRING到TIMESTAMP • 显示字符串'2000-12-01 11:00:00' 作为TIMESTAMP 值 SELECT TO_TIMESTAMP ('2000-12-01 11:00:00', 'YYYY-MM-DD HH:MI:SS') FROM DUAL; • 显示字符串'1999-12-01 11:00:00 -8:00' 作为TIMESTAMP WITH TIME ZONE 值 SELECT TO_TIMESTAMP_TZ('1999-12-01 11:00:00 -8:00', 'YYYY-MM-DD HH:MI:SS TZH:TZM')FROM DUAL;
用 TO_YMINTERVAL转换时间间隔 • 显示一个日期,该日期是,工作在 DEPARTMENT_ID是20的部门的雇员,在受雇之后一年两个月的日期 SELECT hire_date, hire_date + TO_YMINTERVAL('01-02') AS HIRE_DATE_YMININTERVAL FROM EMPLOYEESWHERE department_id = 20;
TZ_OFFSET FROM_TZ TO_TIMESTAMP TO_TIMESTAMP_TZ TO_YMINTERVAL CURRENT_DATE CURRENT_TIMESTAMP LOCALTIMESTAMP DBTIMEZONE SESSIONTIMEZONE EXTRACT 小结 在本课中, 您应该已经学会如何使用下面的函数:
练习 16 概览 本章练习包括使用 Oracle9i日期时间函数: