这几天抽时间对sql做了下强化,这里单独对oracle函数进行总结。
其实,主要是对时间的操作,那么主要说下时间:
不一一分开了,直接上了:
//当前时间
SELECT SYSDATE FROM DUAL;
//下一个星期几的时间,这里是下个星期4的时间
select next_day(sysdate,5) from dual;
//本月第一天,其实这个最容易得到了
select trunc(sysdate,'mm') from dual;
//而且,用好to_char()和to_date()的套用很不错的
select to_date(to_char('04:20','hh24:mi'),'yyyy-MM-dd') from dual;
//本月最后一天的当前时间
select lase_day(sysdate) from dual;
//本月最后一天的0点
select to_char(last_day(sysdate),'yyyy-MM-dd')||'00:00:00'
//或者用concat也可以,转换时间
select TO_DATE(concat(to_char(last_day(sysdate),'yyyy-MM-dd'),'00:00:00'),'yyyy-MM-dd HH24:MI:SS') FROM DUAL;
//时间可以减,但是不可以加,减得到是一天为单位的,这里得到分钟的天花板
select ceil((sysdate-to_date('2015-12-23 00:23:59','yyyy-MM-dd HH24:MI:SI'))*24*60) FROM DUAL
//用时间排序,如果字段类型是varchar2的话,需要转格式
order by to_date(column,'实际的时间格式')
//设置返回值的函数,如果查询不为空,返回本身,如果为空,返回特定值
select nvl1(column,'特定值') from table_test
//在返回情况少的时候使用,如果不为空,返回特定值1,为空,返回特定值2
select nvl2(column,'特定值1','特定值2') from table_test
//情况多的情况下,格式如下:
decode(column,if 是情况1,返回特定值1,if 是情况2,返回特定值2,...最后都是不是,返回默认值)
select decode(age,'10','少年','20','青年','老年') from table_test;
//同类合并的wmsys.wm_concat(colmun)
//
select wmsys.wm_concat(name),age from table_test group by age