Oracle PL/SQL 程序设计读书笔记 - 第10章 日期和时间戳

Oracle PL/SQL 程序设计读书笔记 - 第10章  日期和时间戳

Oracle PL/SQL 程序设计读书笔记 - 第10章 日期和时间戳

10.1 Datatime数据类型

  • DATA:存储日期和时间,能精确到秒。不带时区信息
  • TIMESTAMP:存储日期和时间,不带时区。时间精度可以到达十亿分之一秒(小数点后9位)。
  • TIMESTAMP WITH TIME ZONE:存储时区,日期和时间,精度达到小数点后9位
  • TIMESTAMP WITH LOCAL TIME ZONE:保存日期和精确到小数点后9位的时间,这个数据类型是对时区敏感的。当这个值保存到数据库时,也会转换成数据库时区,而不是保存本地时区。当从数据库提取数据时,这个值又会从数据库的时区转换成本地时区。

解释:

DATA和TIMESTAMP只是时间的精度不同两个都不存储时区相关的内容,TIMESTAMP WITH TIME ZONE是存储时区的,不会自动为用户转换但会告诉用户存储的时间是属于哪个时区的。TIMESTAMP WITH LOCAL TIME ZONE会根据取得用户人的本地时区进行錾

UTC:协调世界时间,使用的是高度精确的原子钏进行测算,也作为世界民用时间系统的基础。

10.1.1 声明日期时间变量

var_name [CONSTANT] datetime_type [{:=| DEFAULT} initial_value]

其中datetime_type可以用下面任意一种类型:

- DATE
- TIMESTAMP [(precision)]
- TIMESTAMP [(precision)] WITH TIME ZONE
- TIMESTAMP [(precision)] WITH LOCAL TIME ZONE

precesion是用来记录小数的秒的小数位数。缺省的精度是6。允许的精度范围从0到9。

提示:一个TIMESTAMP(0)变量就相当于一个DATE变量。

10.2 得到当前日期和时间

  • CURRENT_DATE:会话的时区。类型:DATE
  • CURRENT_TIMESTAMP:会话的时区。类型:TIMESTAMP WITH TIME ZONE
  • LOCALTIMESTAMP:会话的时区。类型:TIMESTAMP
  • SYSDATE:数据库服务器的时区。类型:DATE
  • SYSTIMESTAMP:数据库服务器的时区。类型:TIMESTAMP WITH TIME ZONE

函数SESSIONTIMEZONE和DBTIMEZONE分别报告了你的会话时区和数据库时区。

10.3 INTERVAL数据类型

  • INTERVAL YEAR TO MONTH:允许我们用年和月定义时间间隔
  • INTERVAL DAY TO SECOND:允许我们用天,小时,分钟和秒定义时间间隔。

之所以会有两个以月份为分隔的INTERVAL类型,是因为在所有日期时间的成分中只有月份的时间长度会变。

10.3.1 声明INTERVAL变量

var_name INTERVAL YEAR [(YEAR_PRECISION)] TO MONTH
var_name INTERVAL YEAR
[(YEAR_PRECISION)] TO SECOND [(frac_sec_prec)]

其中: - varname:是要声明的INTERVAL变量的名字 - yearprecision:代表年的位数(0到4)。缺省是2 - dayprecision:代表日期的位数(0到9)。缺省是2 - fracsec_prec:秒的小数部分的位数(0到9),缺省是6

10.4 日期时间转换

  • PL/SQL确认的可以的日期范围是从公元前4712年1月1日,到公元后9999年12月31日。

10.4.1 从字符串到日期时间

隐匿类型转换依赖于NLSDATEFORMAT参数的设置。默认是dd-mon-yyyy。

TO_DATE(string[,format_mask[,nls_language]])
TO_DATE
(number[,format_mask[,nls_language]])
TO_TIMESTAMP
(string[,format_mask[,nls_language]])
TO_TIMESTAMP_TZ
(string[,format_mask[,nls_language]])

nls_language用于指定按照哪种语言翻译字符串中月份和日期的名字及缩写。

-传给TO_DATE函数的要转换成日期的直接量不能长于220个字符
-不能在一个格式掩码中同时出现Julian日期元素(J)和年日元素(DDD
-日期/时间中的一个成员在掩码中不能有多个元素对应。
-同一个掩码中不能同时有24小时时间格式和子午元素。

10.4.2 从日期时间到字符串

TO_CHAR(date[,format_mask[,nls_language]])

如果希望结果是国家字符集,可以用TONCHAR代替TOCHAR

10.4.6 解释没去窗口中两位数字的年份

  • 如果当前的年份落在了头半个世界中(0-49)
    • 如果输入的日期在头半个世纪(0-49),RR返回的是当前世纪
    • 如果输入的日期在后半个世纪(50-99),RR返回的是前一个世纪
  • 如果当前的年份落在了后半个世界中(50-99)
    • 如果输入的日期在头半个世纪(0-49),RR返回的是下一个世纪
    • 如果输入的日期在后半个世纪(50-99),RR返回的是当前世纪

10.5 日期和时间戳直接量

DATE 'YYYY-MM-DD'
TIMESTAMP
'YYYY-MM-DD HH:MI:SS[.FFFFFFFFF] [{ + | - }HH:MI]'

日期和时间戳直接量的格式是由ANSI/ISO标准规定的,无论是你还是DBA都不能修改。

10.7 时间间隔直接量

INTERVAL 'character_pepresentation' start_element TO end_element

10.8 CAST和EXTRACT

10.8.1 CAST函数

10.8.2 EXTRACT函数

EXTRACT函数用于从一个日期时间值中提取日期部分。

EXTRACT(component_name, FROM {datetime | interavl})

posted on 2011-11-22 23:27  天魂无双  阅读(1232)  评论(0编辑  收藏  举报

导航