oracle时间日期处理

Posted Oh,L.E.D

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle时间日期处理相关的知识,希望对你有一定的参考价值。

日期处理

时间日期类型

  • DATE 日期时间类型,包含的时间部分有年、月、日、时、分、秒,不包含秒的小数位和时区。合法的数据范围是January 1, 4712 BC, to December 31, 9999
    AD。默认的格式是通过NLS_
    DATE_FORMAT显示地设置或者通过NLS_TERRITORY隐式地设置。数据大小为固定的7位。
  • TIMESTAMP [(fractional_seconds_precision)] 时间戳类型,包含有年、月、日、时、分、秒,并且秒可以带有精度,精度范围是0位到9位,默认的精度是6位,不带有时区。默认的格式是通过NLS_TIMESTAMP_FORMAT参数显示指定或者通过NLS_TERRITORY参数隐式指定。数据的大小为7-11位,具体的大小取决于设置的精度。
  • TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE 带有时区的时间戳类型。
  • TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE 带有时区的时间戳类型。
  • INTERVAL YEAR [(year_precision)]TO MONTH 存储带有年月的时间期间。
  • INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)] 存储带有日、时、分、秒的时间期间。

日期函数

  • TO_CHAR (datetime,fmt) 日期转格式化,返回类型为VARCHAR2。datetime输入的日期,fmt表示转换的格式。

    SELECT to_char(sysdate,‘yyyy-mm-dd‘) FROM dual;
    select to_char(sysdate,‘dy‘) from dual; #获取星期几
  • TO_DATE(char,fmt) 字符串转日期,返回类型为DATE。char为输入的日期字符串,fmt表示转换的格式。

    SELECT to_date(‘2017-09-13‘,‘yyyy-mm-dd‘) FROM dual;
    SELECT to_char(TO_DATE(‘7‘,‘dd‘),‘yyyy-mm-dd‘)FROM dual;
  • SYSDATE 返回系统的当前时间日期,类型是DATE
  • TRUNC(datetime,fmt) 通过指定的格式截取时间,返回类型为DATE

    #当前时间2017-09-13 113032
    SELECT TO_CHAR(TRUNC(SYSDATE,‘hh‘),‘yyyy-mm-dd hh24:mi:ss‘) FROM DUAL; #2017-09-13 11:00:00  
    SELECT TO_CHAR(TRUNC(SYSDATE,‘yy‘),‘yyyy-mm-dd hh24:mi:ss‘) FROM DUAL; #2017-01-01 00:00:00
    SELECT TO_CHAR(TRUNC(SYSDATE,‘mm‘),‘yyyy-mm-dd hh24:mi:ss‘) FROM DUAL; #2017-09-01 00:00:00
    SELECT TO_CHAR(TRUNC(SYSDATE,‘mi‘),‘yyyy-mm-dd hh24:mi:ss‘) FROM DUAL; #2017-09-13 11:30:00
  • LAST_DAY(date) 返回系统当月的最后一天的日期,类型为DATE

    SELECT LAST_DAY(SYSDATE) from DUAL;

日期运算

  • 对于日期类型我们可以对其执行加法和减法运算,不能执行乘法和除法运算。
  • 一个时间类型的数据只可以和INTERVALNumeric类型的数据执行加法运算,结果为时间类型。
  • Date类型和Date类型相减为Number,表示相差的天数,Date类型和timestamp类型相减为INTERVAL,为INTERVAL,Numeric相减为Date。
  • ORACLE自动将timestamp转换为date类型的值,而且将Number类型的常数转换为算术的日期,间隔表达式表示一些天数。例如:SYSDATE + 1 表示的是明天的日期;SYSDATE -7表示一周以前;SYSDATE + (10 / (24 * 60))表示10分钟以后的时间。

    /**
    相差的时间,单位小时
    */
    SELECT (TO_DATE(‘2017-9-10 12:23:12‘,‘yyyy-mm-dd hh24:mi:ss‘) - TO_DATE(‘2017-9-10 10:23:12‘,‘yyyy-mm-dd hh24:mi:ss‘)) * 24 FROM DUAL;
  • 获取月份之差

    select months_between(to_date(‘2017-12-30‘,‘yyyy-mm-dd‘),to_date(‘2017-01-01‘,‘yyyy-mm-dd‘)) from dual;

参考

https://docs.oracle.com/en/database/



以上是关于oracle时间日期处理的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 数据库 - 使用UEStudio修改dmp文件版本号,解决imp命令恢复的数据库与dmp本地文件版本号不匹配导致的导入失败问题,“ORACLE error 12547”问题处理(代码片段

oracle时间日期处理

Oracle 时间和日期处理

如何在 Toad for Oracle 中使用自定义代码片段?

JS代码片段:一个日期离现在多久了

sql 日期转换代码片段 - Dato,120,konvertere