码迷,mamicode.com
首页 > 数据库 > 详细

oracle时间日期处理

时间:2017-12-30 00:27:27      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:action   处理   cond   部分   _for   最后一天   时间戳   sql   for   

日期处理

时间日期类型

  • 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时间日期处理

标签:action   处理   cond   部分   _for   最后一天   时间戳   sql   for   

原文地址:https://www.cnblogs.com/ZiYangZhou/p/8146636.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!