函数中大杂烩

常用日期函数整理:
--获取某个月的最后一天
values( date('2010-01-14') + 1 month - day( date('2010-01-14') + 1 month)day  );
--获取某个月的第一天
values( date('2010-01-14') + 1 month - day( date('2010-01-14') + 1 month)day + 1 day  );
--获取日期为一周的周几
values(DAYOFWEEK(date('2010-09-05') -1 day) );
--获取日期为一周的周几(标准)
values(DAYOFWEEK_iso(date('2010-09-05') ) );
--返回参数中一年的第几周,用范围在 1-54 的整数值表示。以星期日作为一周的开始。
values(WEEK_iso(date('2010-09-06')));

其它辅助函数

1、DECODE(exp,s1,r1,s2,r2..s,r[,def]) 可以把它理解成一个增强型的if else,只不过它并不通过多行语句,而是在一个函数内实现if else的功能。
exp做为初始参数。s做为对比值,相同则返回r,如果s有多个,则持续遍历所有s,直到某个条件为真为止,否则返回默认值def(如果指定了的话),如果没有默认值,并且前面的对比也都没有为真,则返回空。
毫无疑问,decode是个非常重要的函数,在实现行转列等功能时都会用到,需要牢记和熟练使用。

例如:select decode('a2','a1','true1','a2','true2','default') from dual;

2、GREATEST(n1,n2,...n)  返回序列中的最大值
例如:SELECT GREATEST(15,5,75,8) "Greatest" FROM DUAL;

3、LEAST(n1,n2....n)   返回序列中的最小值
例如:SELECT LEAST(15,5,75,8) LEAST FROM DUAL;

4、NULLIF(c1,c2)
Nullif也是个很有意思的函数。逻辑等价于:CASE WHEN c1 = c2 THEN NULL ELSE c1 END
例如:SELECT NULLIF('a','b'),NULLIF('a','a') FROM DUAL;

5、NVL(c1,c2) 逻辑等价于IF c1 is null THEN c2 ELSE c1 END。c1,c2可以是任何类型。如果两者类型不同,则oracle会自动将c2转换为c1的类型。
例如:SELECT NVL(null, '12') FROM DUAL;

6、NVL2(c1,c2,c3)  大家可能都用到nvl,但你用过nvl2吗?如果c1非空则返回c2,如果c1为空则返回c3
例如:select nvl2('a', 'b', 'c') isNull,nvl2(null, 'b', 'c') isNotNull from dual;

你可能感兴趣的:(oracle,C++,c,C#)