今天在写sql时,想取出数据库中和当前系统时间当月的数据,在执行sql语句时,报错ORA-01830: 日期格式图片在转换整个输入字符串之前结束.
to_date函数
to_date函数用于字符串转日期,与to_char函数刚好相反。to_date形如
--oracle 为了区分分钟和月份,月份以mi表示
to_date('2018-11-22 09:11:22','yyyy-mm-dd hh24:mi:ss')
to_date('2018-11-22','yyyy-mm-dd')
第一个参数参数是源字符串,第二个参数是要转换成的日期形式。但是to_date限制两者精确度须一致,比如to_date(‘2018-11-22 09:11:22’,’yyyy-mm-dd’)这个就无法转换。
我传入的第一个参数是2018-11-22 ,而第二个参数的形式是yyyy-mm 所以就报错了.
oracle获取时间的年月
Oracle中分别取年、月、日的方法
--取年份
Select to_number(to_char(sysdate,'yyyy')) from dual
select extract (year from sysdate) from dual
--取月份
Select to_number(to_char(sysdate,'mm')) from dual
select extract (month from sysdate) from dual
--取日期
Select to_number(to_char(sysdate,'dd')) from dual
select extract (day from sysdate) from dual
Oracle中取日、月的方法
--如果字段本身就是date型
Select to_char(sysdate,'yyyy-mm') from dual
--如果字段本身不是date型
Select to_char(to_date(datechar,'yyyy-mm'),'yyyy-mm') from dual
--也可以用substr方法了,参数4表示从哪个字符开始截取,6表示截取多少个字符
select substr(to_char(sysdate,'yyyy-mm-dd'),4,6) from dual
Oracle中日、月比较大小
--如果字段本身就是date型
to_char(date,'yyyy-mm')<=to_char(sysdate,'yyyy-mm')
--如果字段本身不是date型
to_char(to_date(date,’yyyy-mm’),'yyyy-mm')<=to_char(to_date(datechar),'yyyy-mm')