1. character function
- lower
- upper
- initcap
- concat
- substr
- length
- instr
- lpad|rpad
- trim
- replace
example:
lpad是填充字符到多少位。
使用了这些函数,就不用像abap一样必须到内表中再去做些处理
2. number function
除了加减乘除还有以上3个,都很好理解。不过小数点不仅能求右边的也可以求左边的。
如:select round(45.926,-1) from dual;
结果是50,因为-1代表小数点左边的。5四舍五入后就变成10.
所以
select round(45.926,-2) from dual;
结果是0,因为4,四舍五入变为0.如果是55的话就是100。
SQL> c /-1/-2
1* select round(45.926,-2) from dual
SQL> run
1* select round(45.926,-2) from dual
ROUND(45.926,-2)
----------------
0
3. date function
date function其实可以和number function连用,下图为示例:
这是用上了number function
4. conversion functions
implicit data type conversion
explicit data type conversion
select to_char(qty,’$999.99’) from sales;
5. general function 通用函数
NVL(exp1,exp2):converts a null to an actual value。
example:
有一个用处是统计平均值
select bzirk,avg(nvl(zzfkimg,0)) from s901
where sptag = '20041010'
group by bzirk;
如果zzfkimg有null值的话,avg会忽略掉那么平均值会变大。
NVL2(exp1,exp2,exp3):如果exp1不为空,使用exp2否则使用exp3.
example:
select nvl2(voref, 'hhhh','fffff') from vbap
where vbeln = '0000000001';
注意这里的null并不等同于空字符串。通过se11看表是空值单这里并不是现实fffff
NULLIF (expr1, expr2) :相等返回NULL,不等返回expr1
COALESCE (expression_1, expression_2, ...,expression_n)
列表中第一个非空的表达式是函数的返回值,如果所有的表达式都是空值,最终将返回一个空值。
select last_name,
coalesce(pct, last_name, 10)
from exp;
如果pct和last_name都为空则显示10,否则显示pct或者last_name。
6. CASE, DECODE 不同条件的判断
case其实就是一个if else的判断。
example:
SELECT AVG(CASE WHEN e.salary > 2000 THEN e.salary
ELSE 2000 END) "Average Salary" FROM employees e;
Average Salary
--------------
6461.68224
SELECT cust_last_name,
CASE credit_limit WHEN 100 THEN 'Low'
WHEN 5000 THEN 'High'
ELSE 'Medium' END AS credit
FROM customers
ORDER BY cust_last_name, credit;
CUST_LAST_NAME CREDIT
-------------------- ------
Adjani Medium
Adjani Medium
Alexander Medium
Alexander Medium
Altman High
Altman Medium
不过对于webi中,只需要自定义一个variable即可,不需要自定义sql来做。
decode类似于case语句,估计用的也不多,用时可以查sql reference。