• 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})
  • 相关阅读:
    sun.misc.BASE64Encoder找不到jar包的解决方法
    mybatis中的#和$的区别
    mysql , oracle 从记录中查询出 楼盘下只有 no 公司的 楼盘
    Windows+Git+TortoiseGit+COPSSH 安装 教程
    oracle job 定时执行 存储过程
    如何在PL/SQL中修改ORACLE的字段顺序
    oracle创建数据库连接dblink
    oracle数据库去掉重复记录;只保留一条数据
    Oracle中like查询下划线等特殊字符的处理
    START WITH CONNECT BY PRIOR子句实现递归查询
  • 原文地址:https://www.cnblogs.com/tjpanda88/p/2259594.html
Copyright © 2020-2023  润新知