**函数 **是指一段可以直接被另一段程序调用的程序或代码。
字符串函数
CONCAT(str1,str2,…)
字符串拼接,将str1,str2合并成一个字符串
select CONCAT('Hello','MySQL');
LOWER(str)
将str转换为小写
select LOWER('MySQL');
UPPER(str)
将str转换为大写
select UPPER('Hello');
LPAD(str,len,padstr)
左填充,让padstr填充到str左边,填充到str长度为len
select LPAD('1',5,'0');
RPAD(str,len,padstr)
右填充,让padstr填充到str右边,填充到str长度为len
TRIM([remstr FROM] str)
去除str两边的空格,和java中trim类似
select TRIM(' Hello MySQL');
SUBSTRING(str,pos,len)
类似于java中的substring,返回将str从pos截取len长度的字符串,不同的是str下标从1开始
select SUBSTRING('Hello MySQL',1,5);
数值函数
常见的数值函数:
CEIL(X)
向上取整
select ceil(2.4);
FLOOR(X)
向下取整
select floor(2.9);
MOD(N,M)
取N/M的模
select mod(7,4);
RAND()
取0-1之间的随机数
select RAND(),RAND(),RAND();
ROUND(X,D)
对x四舍五入,保留d位小数
select ROUND(3.1415,3);
日期函数
常见的日期函数:
CURDATE():当前日期
select CURDATE();
CURTIME():当前时间
select CURTIME();
NOW():当前日期+时间
select NOW();
YEAR(date),MONTH(date),DAY(date):获取年月日
select YEAR(NOW()),MONTH(NOW()),DAY(NOW());
DATE_ADD(date,INTERVAL expr unit):向后推多少时间
SELECT
DATE_ADD( NOW(), INTERVAL 10 DAY ), -- 10天
DATE_ADD( NOW(), INTERVAL 10 MONTH ), -- 10个月
DATE_ADD( NOW(), INTERVAL 10 YEAR ); -- 10 年
DATEDIFF(expr1,expr2):两个时间差值(天),第一个减第二个、
SELECT DATEDIFF(NOW(),'2022-11-11');
流程函数
常见的流程函数
IF(expr1,expr2,expr3)
expr1是true,返回expr2,false返回expr3,类似三元
SELECT IF(TRUE,'OK','NoOK'),IF(FALSE,'OK','NoOK');
IFNULL(expr1,expr2)
判断expr1是否是null,不是null返回expr1,是null返回expr2
SELECT
IFNULL( 'ok', 'default' ),
IFNULL( '', 'default' ),
IFNULL( NULL, 'default' );
case expr1 when expr2 then expr3 else expr4 end
当expr1是expr2时,返回expr3,否则返回expr4
SELECT
( CASE '男' WHEN '男' THEN 'man' WHEN '女' THEN 'woman' ELSE '未知' END ),
( CASE '女' WHEN '男' THEN 'man' WHEN '女' THEN 'woman' ELSE '未知' END ),
( CASE '123' WHEN '男' THEN 'man' WHEN '女' THEN 'woman' ELSE '未知' END );