(作者:陈玓玏)
在Oracle中,我觉得最让人头疼的就是操作Date型的数据了,比如取年月日、计算几天前、几年前、几个月前什么的。但是这个又用得很多,因为不管你做什么内容的挖掘,总是离不开时间窗口的,因为数据大多是以人为本的,而人又是善变的,所以时间是你必须非常看重的。
1、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
2、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表示从哪个字符开始截取,10表示截取多少个字符
select substr(to_char(sysdate,'yyyy-mm-dd'),4,6) from dual
以上这种方法虽然很简单粗暴,但亲测有效,而且可以比较大小,请看下方代码
3、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')
可以这样做的原因是:Oracle能够在同类型间默认转换为数字,并进行大小的比较,你要是不放心,也可以换成数字或者时间戳试试。