PLSQL 日期函数 | 您所在的位置:网站首页 › oracleto_date相减报错 › PLSQL 日期函数 |
日期函数 1.sysdate 当前系统时间 日期加减数字=日期加减天数 日期-日期=相差的天数 2.add_months(日期,数) 日期加减月数 数会自动截断取整 select add_months(sysdate,1), add_months(sysdate,-1), add_months(sysdate,12), add_months(sysdate,1.9) from dual --查询三个月前距今多少天 select sysdate-add_months(sysdate,-3) from dual --查询三个月后是几月 select to_char(add_months(sysdate,3),'mm') from dual --查询一年后的今天是星期几 select to_char(add_months(sysdate,12),'dy') from dual 3.months_between(日期1,日期2) 日期之间相差的月数 在oracle中默认一个月有31天 1天=1/31月 select months_between(date'2021-7-1',date'2021-5-1') A, months_between(date'2021-5-1',date'2021-7-1') B, months_between(date'2021-7-15',date'2021-5-1') C, months_between(sysdate,date'2021-5-1') D from dual --查询2008-8-8距今几个月,四舍五入保留两位小数 select round(months_between(sysdate,date'2008-8-8'),2) from dual --查询2012-12-21距今多少年,四舍五入保留两位小数 select round(months_between(sysdate,date'2012-12-21')/12,2) from dual --查询2008-8-8距今几年零几个月零几天 --小数*31得天 select trunc(months_between(sysdate, date '2008-8-8') / 12) || '年' || trunc(months_between(sysdate, date '2008-8-8') - (trunc(months_between(sysdate, date '2008-8-8') / 12) * 12)) || '月' || trunc(((months_between(sysdate, date '2008-8-8') - (trunc(months_between(sysdate, date '2008-8-8') / 12) * 12)) - trunc(months_between(sysdate, date '2008-8-8') - (trunc(months_between(sysdate, date '2008-8-8') / 12) * 12))) * 31) || '日' 岁 from dual select trunc(months_between(sysdate,date'2008-8-8')/12) 年, trunc(mod(months_between(sysdate,date'2008-8-8'),12)) 月, trunc(mod(months_between(sysdate,date'2008-8-8'),1)*31) 日 from dual --日期推进得天 select trunc(sysdate-add_months(date'2008-8-8',trunc(months_between(sysdate,date'2008-8-8')))) A from dual 1.求两个日期相差的 年数 months_between()/12 月数 months_between() 天数 日期相减 小时数 日期相减*24 分钟数 日期相减*24*60 秒数 日期相减*24*60*60 2.日期加减 年 add_months(日期,年数*12) 月 add_months(日期,月数) 天 日期±天数 小时 日期±小时数/24 分钟 日期±/分钟数24/60 秒 日期±秒数/24/60/60 --把hiredate当做员工生日,查询每个人现在几岁零几个月零几天 4.next_day(日期,'星期几'|对应的数字) 下一个星期几 select next_day(sysdate,'星期三'), next_day(sysdate,7) from dual --下周的星期五 select next_day(sysdate,'星期五') from dual --求2020年的第一个星期三 select next_day(date'2020-1-1'-1,'星期三') from dual --求下周周六是多少号 select next_day(next_day(sysdate-1,'星期日'),'星期六') from dual 求下周几的方法:先求本周日,再求本周日的下一个周几,(日期-1) select next_day(next_day(sysdate-1,'星期日'),'星期六') from dual --求下下周的周六 select next_day(next_day(sysdate-1,1),7)+7 from dual --求下下下下下下下下下周的周三 select next_day(next_day(sysdate-1,1),4)+56 from dual --求上上上周的周四 select next_day(next_day(sysdate-1,1),5)-7-7-7-7 from dual --求下周周日是多少号 select next_day(next_day(sysdate-1,1),1) from dual 5.last_day(日期) 月的最后一天 select last_day(sysdate) from dual --求平闰年 --求2月份有多少天 select last_day(to_date(to_char(sysdate,'yyyy')||'-2-1','yyyy-mm-dd')) from dual --查询3个月后的月末是星期几 select to_char(last_day(add_months(sysdate,3)),'dy') from dual 6.round(日期,'格式') 四舍五入到日期之初(过半则入,不过则舍) yyyy 1-6月 本年 7-12月 下一年 --到最近的年初 mm 1-15日 本月 16-31日 下个月 --到最近的月初 (月份按照一个月30来计算) d/dy 1-4(周日-周三) 本周 5-7(周四-周六) 下周 --到最近的周日 (周日是一周的第一天) dd 0-11时 今天 12-23时 下一天--最近的一天之初 hh 0-29分 本小时 30-59分 下一个小时--最近的整时 mi 0-30秒 这分钟 31-59秒 下分钟--最近的整分 q =当季第二个月的16日 下个季度 不能四舍五入到整秒 --当前日期四舍五入到整年,整季,整月,整周,整天,整时,整分 分别哪个日期 [板书] select round(sysdate,'yyyy') 整年, round(sysdate,'q') 整季, round(sysdate,'mm') 整月, round(sysdate,'d') 整周, round(sysdate,'dd') 整天, round(sysdate,'hh') 整时, round(sysdate,'mi') 整分 --,round(sysdate,'ss') --错误 from dual 7.trunc(日期,'格式') 截断到日期之初 yyyy 年初 q 季初 mm 月初 d/dy 周初--周日 dd 天初--0点0分 hh 整时 mi 整分 SS --错误 --当前日期截断到整年,整季,整月,整周,整天,整时,整分 分别哪个日期[板书] select trunc(sysdate,'yyyy') 整年, trunc(sysdate,'q') 整季, trunc(sysdate,'mm') 整月, trunc(sysdate,'d') 整周, trunc(sysdate,'dd') 整天, trunc(sysdate,'hh') 整时, trunc(sysdate,'mi') 整分 --,round(sysdate,'ss') 错误 from dual --求平闰年 --求今年有多少天 select to_char(add_months(trunc(sysdate,'yyyy'),12)-1,'ddd') from dual select add_months(trunc(sysdate,'yyyy'),12)-trunc(sysdate,'yyyy') from dual --求二月有多少天 select last_day(add_months(trunc(sysdate,'yyyy'),1)) from dual select add_months(trunc(sysdate,'yyyy'),2)-1 from dual 函数名(日期,'格式')的横向对比 │to_char │ROUND │ TRUNC ───────┼──────────────┼──────────────┼─────── yyyy │提取年 │返回最近的年初│返回年初 q │提取季度 │返回最近的季初│返回季初 mm │提取月 │返回最近的月初│返回月初 dy │提取星期(汉字)│返回最近的周初│返回周初(周日) d │提取星期(数字)│返回最近的周初│返回周初(周日) dd │提取日 │返回最近的天初│返回天初 hh/hh12│提取时(12制) │返回最近的时初│返回时初 hh24 │提取时(24制) │返回最近的时初│返回时初 mi │提取分 │返回最近的分初│返回分初 SS │提取秒 │/*精度错误*/ │/*精度错误*/ 日期函数小结 函数名 │SYSDATE│add_months│months_between│next_day│last_day│ROUND │trunc│ ────────┼───────┼──────────┼──────────────┼────────┼────────┼──────┼─────┤ 返回类型│ 日期 │ 日期 │ 数值 │ 日期 │ 日期 │ 日期 │日期 │ --通用函数 1.userenv('language') 查看客户端字符集 select userenv('language') from dual 2.greatest(参1,参2...) 返回多个参数中的最大值 参数的数据类型跟第一个参数的数据类型一致 空最大 select greatest(100,200,300) from dual select greatest(date'2020-1-1',sysdate,date'2022-8-5') from dual select greatest('a','b','c') from dual select greatest('100','1000',50,null) from dual 3.least(参1,参2..) 返回多个参数中的最小值 参数的数据类型跟第一个参数的数据类型一致 空最小 select least(100,200,300) from dual select least(date'2020-1-1',sysdate,date'2022-8-5') from dual select least('a','b','c') from dual select least('100','1000',50,null) from dual --查询员工编号,经理编号,部门编号 --以及他们的最大值和最小值 select empno,mgr,deptno,greatest(empno,mgr,deptno),least(empno,mgr,deptno) from emp |
CopyRight 2018-2019 实验室设备网 版权所有 |