Oracle时间日期函数及sql语句 | 您所在的位置:网站首页 › Oracle转为日期时间 › Oracle时间日期函数及sql语句 |
一、时间日期函数 1.to_date函数 to_date的格式:to_date(‘要转换的时间’,’转换成的时间格式’), 两个参数的格式必须匹配,否则会报错。 需要注意的是,在Java中的时间格式是“yyyy-MM-dd HH:mm:ss”,但是在oracle的sql中由于不区分大小写,时间格式中的“mm”将被识别为月,导致出现“ORA 01810 格式代码出现两次”的错误。所以Oracle的SQL采用了mi代替分钟,oracle的全时间格式为“yyyy-MM-dd HH24:mi:ss”。同时,要以24小时时间的形式显示出来要用HH24,而不是HH。 to_char(日期,”转换格式” ) 即把给定的日期按照“转换格式”转换。 转换的格式: yyyy 用4位数表示年,mm 用2位数字表示月,dd 表示当月第几天。同时,用q表示季度,用ww 来表示当年第几周,w用来表示当月第几周。ddd表示当年第几天,dd 表示当月第几天,d表示这个星期的第几天。 2.时间相关的sql语句 (1) 查询转换时间格式 select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;(2) 取得当前日期是一个星期中的第几天 select to_char(sysdate,'D') from dual; ---取得当前日期是一个星期中的第几天ps:根据上面列出的转换格式,有很多类似的查询如下: select to_char(sysdate,'Q') from dual; --当前日期所在季度 select to_char(sysdate,'mm') from dual; --当前日期在本年的第几个月 select to_char(sysdate,'ww') from dual; --当前日期是‘本年’的第几周 select to_char(sysdate,'w') from dual; --当前日期是‘本月’的第几周 select to_char(sysdate,'ddd') from dual; --当前日期是本年第几天 select to_char(sysdate,'dd') from dual; --当前日期是本月第几天(3) 取当前日期是星期几中文显示 select to_char(sysdate,'day') from dual;(4) 给现有日期加/减月(年)份 这里是使用add_months函数实现年月的加减。add_months是运算函数,函数将传入的日期上加上/减去月份数,所以,日期中的日一般是不变的。然而,如果传入的日期是某月的最后一天,那么,结果将会调整以使返回值仍对应新的一月的最后一天。如果,结果月份的天数比开始月份的天数少,那么,也会向回调整以适应有效日期。 select add_months(sysdate,24) from dual; --加上两年 select add_months(sysdate,-24) from dual; --减去两年 select add_months(sysdate,3) from dual; --加上三个月 select add_months(to_date('2017-01-31','yyyy-mm-dd'),1) from dual; --由于一月的最后一天是31号,而加一个月,二月份只有28天,所以返回的结果是2017-2-28。(5) 判断某一日子所在年分是否为润年 select decode(to_char(last_day(trunc(sysdate,'y')+31),'dd'),'29','闰年','平年') from dual;(6) 当前时间减去七年 select sysdate,sysdate - interval '7' year from dual; --当前时间减去七年ps:有很多类似的查询如下: select sysdate,sysdate - interval '7' MINUTE from dual; --当前时间减去7分钟的时间 select sysdate - interval '7' hour from dual; --当前时间减去7小时的时间 select sysdate - interval ’7’ day from dual; --当前时间减去7天的时间 select sysdate,sysdate - interval '7' month from dual; --当前时间减去7月的时间(7)查询日期之间的数据 例如查询student表中出生日期(birthday)在’2016-01-01’ 和’2017-01-01’之间的数据: select * from student where birthday between '2016-01-01' and '2017-01-01';对于日期不规则的数据需要先转格式,如下: select * from student where to_date(student.birthday,'YYYY-MM-DD') between to_date('2016/01/01','YYYY-MM-DD') and to_date('2017/01/01','YYYY-MM-DD');(8)查询小于或者大于某日期的数据 例如查询student表中出生日期(birthday)小于等于’2016-01-01’的数据: select * from student where birthday 和”这样的字符,但是都可以使用 select * from student where(10)伪列dual Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的select语句块中。 比如,“select sysdate from dual”获取系统当前时间。”select user from dual”则返回当前连接的用户。如果是”select 1+2 from dual”,则返回结果3。 |
CopyRight 2018-2019 实验室设备网 版权所有 |