> 文档中心 > MySQL几种常见函数

MySQL几种常见函数

MySQL数据库中提供了很丰富的函数,比如我们常用的数值函数,字符串及日期处理函数等。SELECT语句及其条件表达式都可以使用这些函数,函数可以帮助用户更加方便的处理表中的数据,使MySQL数据库的功能更加强大。本篇文章主要为大家介绍几类常用函数的用法:

  • 一、数值函数
  • 二、字符串函数
  • 三、日期函数
  • 四、流程函数

一、数值函数

MySQL 中内置了很多数值函数,常用的几个如下:

由于数值函数较为简单,我们就不进行一一地演示了,使用方法都大同小异!我们以 ROUND(x,y) 为例演示一下:

ROUND

  •  ROUND(x,y):求参数 x 的四舍五入的值,并保留 y 位小数
SELECT ROUND(2.345, 2);

 

学完本章节,我们来一个小的练习叭:
        通过数据库的函数,生成一个随机的六位验证码。

SELECT ROUND(RAND() * 1000000);    // 错误写法

上面这样写是不对的, 因为 RAND() 函数是 0-1 之间的小数,有可能出现 0.0012 等等这样的小数,经转换后得到的就不是六位数了,所以我们还得加一个保险,强制补 0 保证结果是六位数:

SELECT LPAD(ROUND(RAND() * 1000000, 0), 6, 0);    // 正确写法

 

二、字符串函数

MySQL 中内置了很多字符串函数,常用的几个如下:

CONCAT

  • 字符串拼接,将 s1, s2, ..... , sn 拼接成一个字符串
SELECT CONCAT("Hello"," MySQL");

LOWER & UPPER

  • LOWER(str):将字符串 str 全部转为小写
  • UPPER(str):将字符串 str 全部转为大写
SELECT LOWER("Hello"), UPPER("Hello");

LPAD & RPAD

  • LPAD(s1, len, s2):在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len
  • RPAD(s1, len, s2): 在字符串 s1 的结尾处填充字符串 s2,使字符串长度达到 len
SELECT LPAD("01",5,"-"), RPAD("01",5,"-");

TRIM & SUBSTRING

  • TRIM(str):仅去掉字符串 str 头部和尾部的空格
  • SUBSTRING(s, start, len):从字符串 s 的 start 位置截取长度为 length 的子字符串,等同于 SUBSTR(s, start, length)
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

  • DATE_ADD(date, INTERVAL expr type):返回一个日期/时间值加上一个时间间隔expr后的时间值 
SELECT DATE_ADD(NOW(),INTERVAL 70 YEAR), DATE_ADD(NOW(),INTERVAL 70 MONTH), DATE_ADD(NOW(),INTERVAL 70 DAY);

DATEDIFF

  • DATEDIFF(date1, date2):返回起始时间 date1 和结束时间 date2 之间的天数
SELECT DATEDIFF("2022-5-7","2022-7-9");

学完本章节,我们来一个小的练习叭:
        查询所有员工的入职天数,并根据入职天数倒序排序。

SELECT name, DATEDIFF(CURDATE(),entrydate) as 'entrydays' FROM emp ORDER BY entrydays desc;

四、流程函数

流程函数也是很常见的一类函数,可以在 SQL 语句中实现筛选条件,从而提高语句的效率:

IF 

  • IF(value, t, f):如果表达式 value 成立,返回结果 t;否则,返回结果 f。 
SELECT IF(TRUE,'OK','ERROR'), IF(FALSE,'OK','ERROR');

IFNULL

  • IFNULL(value1, value2):如果 value1 的值不为 NULL,则返回 value1,否则返回 value2。 
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 resultEND
  • CASE 表示函数开始,END 表示函数结束。如果 condition1 成立,则返回 result1, 如果 condition2 成立,则返回 result2,当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了。 

下面以一个例子说明这个函数:
        查询 emp 表的员工姓名和员工地址,员工地址在北京和上海的显示为一线城市,除此之外的都显示为二线城市: 

SELECTname,(CASE workaddress WHEN '北京' THEN '一线城市' WHEN '上海' THEN '一线城市' ELSE '二线城市' END) as '工作地址'FROM emp;