函数
MySQL函数是 MySQL 数据库提供的内部函数,这些内部函数可以帮助用户更加方便地处理表中的数据。函数就像预定的公式一样存放在数据库里,每个用户都可以调用已经存在的函数来完成某些功能。
-
类似Java定义方法
-
可以带参数
-
必须有返回值(一行一列) ,重点:java方法可以没有返回值,数据库函数必须要有返回值 select max(score) from sc;
-
函数可以嵌套到sql语句中 注:存储过程则不可以
-
函数可嵌套调用
常用函数
日期函数
函数名称 | 作 用 |
---|---|
NOW 和 SYSDATE | 两个函数作用相同,返回当前系统的日期和时间值 |
MONTH | 获取指定日期中的月份 |
DAYOFMONTH | 获取指定日期是一个月中是第几天,返回值范围是1~31 |
YEAR | 获取年份,返回值范围是 1970〜2069 |
DATEDIFF | 获取两个日期之间间隔,返回参数 1 减去参数 2 的值 |
DATE_FORMAT | 格式化指定的日期,根据参数返回指定格式的值 |
DATE_ADD 和 ADDDATE | 两个函数功能相同,都是向日期添加指定的时间间隔 |
WEEKDAY | 获取指定日期在一周内的对应的工作日索引 |
QUARTER | 获取季度 |
WEEK | 获取指定日期 |
WEEKOFYEAR | 获取提定日期在一年中处第几个星期 |
DATE_FORMAT():将日期转换成字符串 STR_TO_DATE():将字符串转换成日期
date_add(NOW(), interval 1 MONTH)
提问:
-
查询各学生的年龄,只按年份来算
-
按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一
-
查询本周过生日的学生
-
查询下周过生日的学生
-
查询本月过生日的学生
-
查询下月过生日的学生
字符串函数
函数名称 | 作 用 |
---|---|
LENGTH | 计算字符串长度函数,返回字符串的字节长度 |
LOWER | 将字符串中的字母转换为小写 |
UPPER | 将字符串中的字母转换为大写 |
LEFT | 从左侧字截取符串,返回字符串左边的若干个字符 |
RIGHT | 从右侧字截取符串,返回字符串右边的若干个字符 |
TRIM | 删除字符串左右两侧的空格 |
REPLACE | 字符串替换函数,返回替换后的新字符串 |
SUBSTRING | 截取字符串,返回从指定位置开始的指定长度的字符换 |
CONCAT | 字符串连接 |
... |
数值型函数
函数名称 | 作 用 |
---|---|
ABS | 求绝对值 |
SQRT | 求二次方根 |
MOD | 求余数 |
CEIL 和 CEILING | 两个函数功能相同,都是返回不小于参数的最小整数,即向上取整 |
FLOOR | 向下取整,返回值转化为一个BIGINT |
RAND | 生成一个0~1之间的随机数,传入整数参数是,用来产生重复序列 |
ROUND | 对所传参数进行四舍五入 |
... |
聚合函数
函数名称 | 作用 |
---|---|
MAX | 查询指定列的最大值 |
MIN | 查询指定列的最小值 |
COUNT | 统计查询结果的行数 |
SUM | 求和,返回指定列的总和 |
AVG | 求平均值,返回指定列数据的平均值 |
流程控制函数
函数名称 | 作用 |
---|---|
IF | 判断,流程控制 |
IFNULL | 判断是否为空 |
CASE | 搜索语句 |
-
IF语法结构如下:
IF(expr,v1,v2)
示例:
SELECT sid,sname,IF(address is NULL,'未知',address) '地址' FROM t_student ;
-
IFNULL函数的语法:
IFNULL(v1,v2); 其中:如果 v1 不为 NULL,则 IFNULL 函数返回 v1; 否则返回 v2 的结果。
示例:
SELECT sid,sname,IFNULL(address,'未知') '地址' FROM t_student ;
-
CASE
简单的 CASE 语句的语法:
CASE <表达式> WHEN <值1> THEN <操作> WHEN <值2> THEN <操作> ... ELSE <操作> END CASE;
其中:<表达式> 可以是任何有效的表达式。我们将 <表达式> 的值与每个 WHEN 子句中的值进行比较,例如 <值1>,<值2> 等。如果 <表达式> 和 <值n> 的值相等,则执行相应的 WHEN 分支中的命令 <操作>。如果 WHEN 子句中的 <值n> 没有与 <表达式> 的值匹配,则 ELSE 子句中的命令将被执行。ELSE 子句是可选的。 如果省略 ELSE 子句,并且找不到匹配项,MySQL 将引发错误。
示例:
SELECT CASE WEEKDAY(NOW()) WHEN 0 THEN '星期一' WHEN 1 THEN '星期二' WHEN 2 THEN '星期三' WHEN 3 THEN '星期四' WHEN 4 THEN '星期五' WHEN 5 THEN '星期六' ELSE '星期天' END AS COLUMN1,NOW(),WEEKDAY(NOW()),DAYNAME(NOW());
提问:如何显示成绩等级?
union
mysql union 用于把来自多个select 语句的结果组合到一个结果集合中。语法为:
select column,......from table1 union [all] select column,...... from table2
重复记录是指查询中各个字段完全重复的记录。
第一个 SELECT 语句中被使用的字段名称也被用于结果的字段名称。
各 SELECT 语句字段名称可以不同,但字段属性必须一致。
union 与 union all 的区别
当使用union 时,mysql 会把结果集中重复的记录删掉,而使用union all ,mysql 会把所有的记录返回,且效率高于union 。