每个数据库都会在标准的SQL基础上扩展一些函数。函数一般会有一或多个输入(即参数),最终只返回一个值作为返回值。
SQL中的函数是独立的程序单元。调用时无需使用任何类、对象作为调用者。
- 多行函数(也称 聚集函数、分组函数)
对多行输入整体计算,最后只得到一个结果。主要完成一些统计功能,在大部分数据库中基本相同。
- 单行函数
对每行输入值单独计算,每行得到一个结果并返回。不同数据库单行函数差别很大。
MySQL中的单行函数具有如下特征:
- 可多个参数,但只返回一个值;
- 参数可以是变量、常量、数据列;
- 对每行单独起作用,每行返回一个结果;
- 使用单行函数可改变参数的数据类型;
- 支持嵌套使用(内层函数返回值是外层函数的参数)。
MySQL单行函数分类:
MySQL数据库的数据类型大致分为数值型、字符型和日期时间型,MySQL提供了对应的函数。
数值函数、字符函数、日期和时间函数、转换函数、其他函数(位函数、流程控制函数、加密解密函数、信息函数)。
# 表中name字段的字符长度(输出行数与表的行数相同)
SELECT
CHAR_LENGTH(NAME)
FROM student;
# 嵌套使用
SELECT SIN(CHAR_LENGTH(NAME))
FROM student;
# 为指定日期添加一定的时间
SELECT
DATE_ADD(
'2016-02-28',
# INTERVAL是关键字,后跟一个值和单位
INTERVAL 2 DAY #输出2016-03-01
);
# 更简便的增加指定时间
SELECT
ADDDATE('2015-01-18',3);
SELECT
# CURTIME(); # 获取当前时间,如17:52:55
# 获取当前日期,如2016-01-19
CURDATE();
# MD5加密
SELECT MD5('hello');
#
#处理NULL的函数
#
SELECT
# IFNULL(id,'expr') #
id为null,则返回expr
# NULLIF(grade, math) #
grade和math相等则返回null,否则返回grade
ISNULL(id) # 为null则返回0(true),否则返回1(false)
FROM student;
SELECT
# 若expr1(id)为true、不等于0且不等于null,则返回expr2,否则返回expr3
#此处id不是布尔值,只要非空即为true
IF(id,'expr2','expr3')
FROM student;
#
# case流程控制函数
# 两种用法
#
SELECT
NAME,
CASE id
WHEN 1 THEN
'is
1'
WHEN 2 THEN
'is
2'
ELSE
'>2'
END AS `level`
FROM
student;
# case语法2更灵活
# when condition(返回boolean值的表达式)
SELECT
NAME,
CASE #
id
WHEN id <=5 THEN
'small'
WHEN id <10 THEN
'big'
ELSE
'null'
END AS `level`
FROM
student;