MySQL数据库中提供了很丰富的函数,比如我们常用的数值函数,字符串及日期处理函数等。SELECT语句及其条件表达式都可以使用这些函数,函数可以帮助用户更加方便的处理表中的数据,使MySQL数据库的功能更加强大。本篇文章主要为大家介绍几类常用函数的用法:
由于数值函数较为简单,我们就不进行一一地演示了,使用方法都大同小异!我们以 ROUND(x,y) 为例演示一下:
ROUND
SELECT ROUND(2.345, 2);
学完本章节,我们来一个小的练习叭:
通过数据库的函数,生成一个随机的六位验证码。
SELECT ROUND(RAND() * 1000000); // 错误写法
上面这样写是不对的, 因为 RAND() 函数是 0-1 之间的小数,有可能出现 0.0012 等等这样的小数,经转换后得到的就不是六位数了,所以我们还得加一个保险,强制补 0 保证结果是六位数:
SELECT LPAD(ROUND(RAND() * 1000000, 0), 6, 0); // 正确写法
CONCAT
SELECT CONCAT("Hello"," MySQL");
LOWER & UPPER
SELECT LOWER("Hello"), UPPER("Hello");
LPAD & RPAD
SELECT LPAD("01",5,"-"), RPAD("01",5,"-");
TRIM & SUBSTRING
SELECT TRIM(" Hello World "), SUBSTRING("Hello World", 1, 5);
学完本章节,我们来一个小的练习叭:
由于业务需求变更,企业员工的工号统一为 5 位数,目前不足 5 位数的全部在前面补 0。比如:1 号员工的工号应该为 00001
UPDATE emp SET workno = LPAD(workno,5,0);
CURDATE & CURTIME & NOW
SELECT CURDATE(), CURTIME(), NOW();
YEAR & MONTH & DAY
SELECT YEAR(NOW()), MONTH(NOW()), DAY(NOW());
DATE_ADD
SELECT DATE_ADD(NOW(),INTERVAL 70 YEAR), DATE_ADD(NOW(),INTERVAL 70 MONTH), DATE_ADD(NOW(),INTERVAL 70 DAY);
DATEDIFF
SELECT DATEDIFF("2022-5-7","2022-7-9");
学完本章节,我们来一个小的练习叭:
查询所有员工的入职天数,并根据入职天数倒序排序。
SELECT name, DATEDIFF(CURDATE(),entrydate) as 'entrydays' FROM emp ORDER BY entrydays desc;
流程函数也是很常见的一类函数,可以在 SQL 语句中实现筛选条件,从而提高语句的效率:
IF
SELECT IF(TRUE,'OK','ERROR'), IF(FALSE,'OK','ERROR');
IFNULL
SELECT IFNULL('OK','ERROR'), IFNULL(NULL,'ERROR');
CASE WHEN THEN ELSE END
CASE expression
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
WHEN conditionN THEN resultN
ELSE result
END
下面以一个例子说明这个函数:
查询 emp 表的员工姓名和员工地址,员工地址在北京和上海的显示为一线城市,除此之外的都显示为二线城市:
SELECT
name,
(CASE workaddress WHEN '北京' THEN '一线城市' WHEN '上海' THEN '一线城市' ELSE '二线城市' END) as '工作地址'
FROM emp;