1. 两种主要类型的函数:
单行函数:同时只能对一行进行操作,且对输入的每一行返回一行输出结果。
聚合函数:同时可以对多行进行操作,并返回一行输出结果。
2. 单行函数
1) 字符函数;
1. ASCII(x):返回字符x的ASCII码。
CHR(x):返回ASCII码为x的字符。
2. CONCAT(x,y):将y添加到x之后,并返回得到的字符串。(与||操作符的功能完全相同)
3. INITCAP(x):将x中每个单词的首字母转换成大写。
4. INSTR(x,find_string [,start] [,occurrence]):在x中查找find_string,并返回find_string所在的位置。可选参数start表明从哪个位置开始查找,occurrence说明应返回find_string第几次出现的位置。
5. LENGTH(x):获得x中字符的个数。
6. LOWER(x)和UPPER(x)
7. LPAD(x,width [,pad_string])和RPAD(x,width [,pad_string]):在x的左边/右边补齐空格,使x的总长度达到width。可选参数pad_string指定填充字符串。
8. LTRIM(x [,trim_string])、RTRIM(x [,trim_string])和TRIM([trim_string FROM] x):从左边/右边/两边截去字符,可选参数trim_string指定要截去的字符,默认截去空格。
9. NVL(x,value)、NVL2(x,value1,value2)
10. REPLACE(x,search_string,replace_string)
11. SOUNDEX(x):获得包含x发音的一个字符串,该函数用于对英文拼写不同但发音相似的单词进行比较。
12. SUBSTR(x,start [,length])
2) 数字函数
1. ABS(x)、MOD(x,y)、POWER(x,y)、SQRT(x)、ACOS((x)、ASIN(x)、ATAN(x)、ATAN2(x,y)、BITAND(x,y)、COS(x)、COSH(x)、EXP(x)、LOG(x,y)、LN(x)、SIN(x)、TAN(x)、TANH(x)
CEIL(x):获得大于或等于x的最小整数。
FLOOR(x):获得小于或等于x的最大整数。
ROUND(x [,y])计算对x取整的结果,可选参数y说明对第几位小数取整,默认为0
TRUNC(x [,y])计算对x截断的结果,可选参数y说明对第几位小数截断,默认为0
SIGN(x):获得x的符号。
3) 转换函数
1. TO_CHAR(x [,format]):将x(数字或日期)转换为一个字符串,可选参数format指定格式。
SELECT TO_CHAR(12345.67,'99,999.99) FROM DUAL; --12,345.67
注:如果要处理的数包含的数字个数多于格式中指定的数字个数,那么进行格式转换时,将会返回一个由井号(#)组成的字符串。
2. TO_NUMBER(x [,format]): 将x转换为一个数字,format说明了x的格式
SELECT TO_NUMBER('-$12,345.67','$99,999.99') FROM DUAL; --12345.67
3. CAST(x AS type):将x转换为由type指定的兼容数据库类型。
4) 正则表达式函数
3. 聚合函数
1) AVG(x)、MAX(x)、MIN(x)、SUM(x)
2) COUNT(x):使用该函数时要避免使用星号(*),因为这样返回结果所需的时间可能会更长。相反,应该使用表中某一列或者使用ROWID伪列。
SELECT COUNT(ROWID) FROM products;
3) STDDEV(x):标准差(方差的平方根)
VARIANCE(x):方差
4. 对行进行分组
1) 使用GROUP BY子句对行进行分组
例:SELECT product_type_id,COUNT(ROWID) FROM products
GROUP BY product_type_id
ORDER BY product_type_id;
注:1. 不必将GROUP BY中用到的列包含在SELECT之后的列表中。(如上例SELECT 后的product_type_id可以去掉)。
2. 如果查询中包含聚合函数,而所选择的列并不在聚合函数中,那么这些列必须在GROUP BY子句中。
例:SELECT product_type_id,AVG(price) FROM products;
错误:product_type_id不在AVG函数中,也没在GROUP BY子句中,应改为:
SELECT product_type_id,AVG(price) FROM products
GROUP BY product_type_id;
3. 不能在WHERE子句中使用聚合函数来限制行,因为WHERE子句只能对单行而不是行组进行过滤,要过滤行组,可以使用HAVING子句。
例: SELECT product_type_id,AVG(price) FROM products
WHERE AVG(price) > 20
GROUP BY product_type_id;
错误,应改为:
SELECT product_type_id,AVG(price) FROM products
GROUP BY product_type_id
HAVING AVG(price) > 20;
2) 使用HAVING子句过滤行组
注:HAVING子句放在GROUP BY子句之后,GROUP BY子句可以不与HAVING子句一起使用,但HAVING必须与GROUP BY子句一起使用。
3) 组合使用WHERE和GROUP BY子句
作用:WHERE首先对返回的行进行过滤,然后GROUP BY对保留的行组进行分组。
例: SELECT product_type_id,AVG(price) FROM products
WHERE price > 15
GROUP BY product_type_id
ORDER BY product_type_id;
4) 组合使用WHERE、GROUP BY和HAVING子句
作用:WHERE首先对返回的行进行过滤,然后GROUP BY对保留的行组进行分组,最后HAVING对行组进行过滤。
例: SELECT product_type_id,AVG(price) FROM products
WHERE price > 15
GROUP BY product_type_id
HAVING AVG(price) > 13
ORDER BY product_type_id;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17014649/viewspace-604471/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17014649/viewspace-604471/