1、数值型函数
ABS
求绝对值
求5、-2.4、-24 和 0 的绝对值
-- 绝对值
SELECT ABS(5), ABS(-2.4), ABS(-24), ABS(0);
SQRT
SQRT | 求二次方根, 平方根函数 SQRT(x) 返回非负数 x 的二次方根。负数没有平方根,返回结果为 NULL |
---|
求 25、120 和 -9 的二次平方根
SELECT SQRT(25), SQRT(120), SQRT(-9);
MOD
MOD | 求余数,MOD(x,y) 返回 x 被 y 除后的余数 |
---|
对 MOD(63,8)、MOD(120,10)、MOD(15.5,3) 进行求余运算
SELECT MOD(63,8),MOD(120,10),MOD(15.5,3);
CEILING || CEIL
CEIL 和 CEILING | 两个函数功能相同,都是返回不小于参数的最小整数,即向上取整 |
---|
使用 CEILING 函数返回最小整数
-- 向上取整
SELECT CEIL(-2.5),CEILING(2.5);
FLOOR
FLOOR | 向下取整,返回值转化为一个BIGINT |
---|
求 小于 5,5.66,-4,-4.66 的最大整数
-- 向下取整
SELECT FLOOR(5),FLOOR(5.66),FLOOR(-4),FLOOR(-4.66);
RAND
RAND | 生成一个0~1之间的随机数,传入整数参数是,用来产生重复序列。 |
---|
随机数
-- 随机数
SELECT RAND(), RAND(99), RAND(99), RAND();
ROUND
给个定数参数时,rand(99)两个值会重复。
ROUND | ROUND(x)对所传参数进行四舍五入。 ROUND(x,y) 函数对参数x进行四舍五入的操作,返回值保留小数点后面指定的y位 |
---|
SELECT ROUND(2.5), ROUND(3.1), ROUND(3.6), ROUND(-3.6888, 2);
SIGN
SIGN | 返回参数的符号。 x 的值为负、零和正时返回结果依次为 -1、0 和 1 |
---|
使用 SIGN 函数返回参数的符号
-- 返回符号
SELECT SIGN(-6),SIGN(0),SIGN(34);
POW
POW 和 POWER | 两个函数的功能相同,都是所传参数的次方的结果值 |
---|
使用 POW(x,y) 和 POWER(x,y) 函数对参数 x 进行 y 次方的求值
-- 平方
SELECT POW(3, 3), POWER(8, 2);
SIN
SIN | 求正弦值 |
---|
使用 SIN 函数计算正弦值
-- 正弦
SELECT SIN(1),SIN(0.5*PI());
ASIN
[ASIN]( | 求反正弦值,与函数 SIN 互为反函数。 若 x 不在 -1 到 1 的范围之内,则返回 NULL |
---|
ASIN 函数计算反正弦值
-- 反正弦
SELECT ASIN(0.8414709848078965),ASIN(2);
COS
COS | 求余弦值 |
---|
-- 余弦
SELECT COS(1),COS(0),COS(PI());
ACOS
ACOS | 求反余弦值,与函数 COS 互为反函数 x 值的范围必须在 -1 和 1 之间,否则返回 NULL |
---|
SELECT ACOS(2),ACOS(1),ACOS(-1);
TAN
TAN | 求正切值 |
---|
-- 正切
SELECT TAN(1),TAN(0);
2、字符串函数
LENGTH
计算字符串长度函数,返回字符串的字节长度。
使用 uft8(UNICODE 的一种变长字符编码,又称万国码)编码字符集时,一个汉字是 3 个字节,一个数字或字母是一个字节
-- 长度
SELECT LENGTH('name'), LENGTH(9090), LENGTH('数据库');
CONCAT
合并字符串函数,返回结果为连接参数产生的字符串,参数可以使一个或多个。
若有任何一个参数为 NULL,则返回值为 NULL
-- 字符串拼接
SELECT CONCAT('MySQL','5.7'),CONCAT('MySQL',NULL);
INSERT
替换字符串函数
-- 替换字符串
SELECT INSERT('football', 2, 2, '888'), INSERT('football', 8, 2, '888'), INSERT('football', 2, 18, '888');
LOWER || UPPER
LOWER 将字符串中的字母转换为小写
UPPER 将字符串中的字母转换为大写
-- 大小写
SELECT LOWER('BLUE'), UPPER('blue');
LEFT || RIGTH
LEFT 从左侧字截取符串,返回字符串左边的若干个字符
LEFT(s,n) 函数返回字符串 s 最左边的 n 个字符
RIGHT 从右侧字截取符串,返回字符串右边的若干个字符
RIGHT(s,n) 函数返回字符串 s 最右边的 n 个字符
-- 字段截取
SELECT LEFT('MySQL', 3), RIGHT('MySQL',3);
TRIM
TRIM 删除字符串左右两侧的空格
-- 去除两边空格
SELECT TRIM(' mobile ');
REPLACE
REPLACE
字符串替换函数,返回替换后的新字符串。
REPLACE(s,s1,s2) 使用字符串 s2 替换字符串 s 中所有的字符串 s1
-- 字符串替换
SELECT REPLACE('aaa.bb.com', 'b', '99');
SUBSTRING
SUBSTRING
截取字符串,返回从指定位置开始的指定长度的字符换
-- 截取
SELECT SUBSTRING('computer', 2, 4), SUBSTRING('computer', -5);
REVERSE
REVERSE
字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串
-- 反转
SELECT REVERSE('hello');
3、 日期和时间函数
CURDATE || CURTIME || NOW
CURDATE 和 CURRENT_DATE 两个函数作用相同,返回当前系统的日期值
CURTIME 和 CURRENT_TIME 两个函数作用相同,返回当前系统的时间值
NOW 和 SYSDATE 两个函数作用相同,返回当前系统的日期和时间值
SELECT
CURDATE(),
CURRENT_DATE(),
CURRENT_DATE()+0,
CURTIME(),
CURRENT_TIME(),
CURRENT_TIME()+0;
SELECT NOW(), SYSDATE();
SYSDATE 的 不同之处
MySQL 中 NOW() 和 SYSDATE() 都表示当前时间,但是 NOW() 取的是语句开始执行的时间,而 SYSDATE() 取的是语句执行过程中动态的实时时间
-- sleep(3) 延迟3s
SELECT NOW(), SYSDATE(), SLEEP(3), NOW(), SYSDATE();
运行结果可以看出,NOW() 函数始终获取的是 SQL 语句开始执行的时间,而 SYSDATE() 函数则是动态获取的实时时间
UNIX_TIMESTAMP || FROM_UNIXTIME
UNIX_TIMESTAMP 获取UNIX时间戳函数,返回一个以 UNIX 时间戳为基础的无符号整数
FROM_UNIXTIME 将 UNIX 时间戳转换为时间格式,与UNIX_TIMESTAMP互为反函数
SELECT UNIX_TIMESTAMP(), UNIX_TIMESTAMP(NOW());
SELECT FROM_UNIXTIME(1652580661)
MONTH
MONTH 获取指定日期中的月份
MONTHNAME 获取指定日期中的月份英文名称
SELECT MONTH(NOW()), MONTHNAME(NOW());
DAYNAME || DAYOFWEEK || WEEK || DAYOFMONTH || DAYOFYEAR
SELECT
DAYNAME(NOW()),
DAYOFWEEK(NOW()),
WEEK(NOW()),
DAYOFYEAR(NOW()),
DAYOFMONTH(NOW())
YEAR || TIME_TO_SEC || SEC_TO_TIME
YEAR 获取年份,返回值范围是 1970〜2069
TIME_TO_SEC 将时间参数转换为秒数
SEC_TO_TIME 将秒数转换为时间,与TIME_TO_SEC 互为反函数
SELECT YEAR(NOW()), TIME_TO_SEC(NOW()), SEC_TO_TIME(TIME_TO_SEC(NOW()));
DATE_SUB || DATE_ADD
DATE_ADD 和 ADDDATE 两个函数功能相同,都是向日期添加指定的时间间隔
DATE_SUB 和 SUBDATE 两个函数功能相同,都是向日期减去指定的时间间隔
SELECT
DATE_SUB(NOW(),INTERVAL 1 DAY) as pre_day1,
SUBDATE(NOW(),INTERVAL 1 DAY) as pre_day2,
DATE_SUB(NOW(), INTERVAL 1 MONTH) as pre_month,
DATE_ADD(NOW(),INTERVAL 1 DAY) as next_day1,
ADDDATE(NOW(),INTERVAL 1 DAY) as next_day2,
DATE_ADD(NOW(), INTERVAL 1 MONTH) as next_month
ADDTIME || SUBTIME
ADDTIME 时间加法运算,在原始时间上添加指定的时间
SUBTIME 时间减法运算,在原始时间上减去指定的时间
SELECT ADDTIME(NOW(), '12:00:00'), SUBTIME(NOW(), '12:00:00');
DATEDIFF
DATEDIFF
获取两个日期之间间隔,返回参数 1 减去参数 2 的值
SELECT DATEDIFF(NOW(), '2021-05-15')
DATE_FORMAT
DATE_FORMAT
格式化指定的日期,根据参数返回指定格式的值
DATE_FORMAT(date,format) 函数是根据 format 指定的格式显示 date 值。
DATE_FORMAT() 函数接受两个参数:
date:是要格式化的有效日期值
format:是由预定义的说明符组成的格式字符串,每个说明符前面都有一个百分比字符(%)。
说明符 说明
%a 工作日的缩写名称(Sun~Sat)
%b 月份的缩写名称(Jan…Dec)
%c 月份,数字形式(0~12)
%D 带有英语后缀的该月日期(0th, 2st, 3nd,…)
%d 该月日期,数字形式(00~31)
%e 该月日期,数字形式((0~31)
%f 微秒(000000 …999999)
%H 以 2 位数表示 24 小时(00~23)
%h, %I 以 2 位数表示 12 小时(01~12)
%i 分钟,数字形式(00~59)
%j —年中的天数(001~366)
%k 以 24 小时(0~23)表示
%l 以12小时(1~12)表示
%M 月份名称(January~December)
%m 月份,数字形式(00~12)
%p 上午(AM) 或下午(PM)
%r 时间,12小时制(小时 (hh): 分钟 (mm) : 秒数 (ss) 后加 AM 或 PM)
%S, %s 以 2 位数形式表示秒(00~59)
%T 时间,24 小时制(小时 (hh): 分钟 (mm): 秒数 (ss))
%U 周(00~53),其中周日为每周的第一天
%u 周(00~53),其中周一为每周的第一天
%V 周(01~53),其中周日为每周的第一天,和%X同时使用
%v 周(01~53),其中周一为每周的第一天,和%x同时使用
%W 星期标识(周日、周一、周二…周六)
%w —周中的每日(0= 周日…6= 周六)
%X 该周的年份,其中周日为每周的第一天,数字形式,4 位数,和%V同时使用
%x 该周的年份,其中周一为每周的第一天,数字形式,4位数,和%v同时使用
%Y 4 位数形式表示年份
%y 2 位数形式表示年份
%% %一个文字字符
SELECT
DATE_FORMAT(NOW(), '%T') t1,
DATE_FORMAT(NOW(), '%Y') t2,
DATE_FORMAT(NOW(), '%y') t3,
DATE_FORMAT(NOW(), '%M') t4,
DATE_FORMAT(NOW(), '%m') t5,
DATE_FORMAT(NOW(), '%D') t6,
DATE_FORMAT(NOW(), '%d') t7,
DATE_FORMAT(NOW(), '%H') t8,
DATE_FORMAT(NOW(), '%h') t9,
DATE_FORMAT(NOW(), '%I') t10,
DATE_FORMAT(NOW(), '%i') t11,
DATE_FORMAT(NOW(), '%S') t12,
DATE_FORMAT(NOW(), '%s') t13,
DATE_FORMAT(NOW(), '%Y-%m-%d %T') now
4、聚合函数
MAX 查询指定列的最大值
MIN 查询指定列的最小值
COUNT 统计查询结果的行数
SUM 求和,返回指定列的总和
AVG 求平均值,返回指定列数据的平均值
SELECT
MAX(YEAR(birth)),
MIN(YEAR(birth)),
COUNT(*),
SUM(YEAR(birth)),
AVG(YEAR(birth))
FROM pet;
5、流程控制函数
IF 判断,流程控制
IFNULL 判断是否为空
CASE 搜索语句
SELECT
NAME,
birth,
IF(YEAR(birth) < 2000, '小于2000', '大于2000')
FROM pet;
IFNULL 函数是 MySQL 控制流函数之一,它接受两个参数,如果不是 NULL,则返回第一个参数。 否则,IFNULL 函数返回第二个参数。两个参数可以是文字值或表达式
SELECT
IFNULL(5,8),
IFNULL(NULL,'OK'),
IFNULL(SQRT(-8),'FALSE'),
SQRT(-8)
简单的 CASE 语句的语法:
CASE <表达式>
WHEN <值1> THEN <操作>
WHEN <值2> THEN <操作>
...
ELSE <操作>
END CASE;
SELECT
CASE
WEEKDAY(NOW())
WHEN 0
THEN '星期1'
WHEN 1
THEN '星期2'
WHEN 2
THEN '星期3'
WHEN 3
THEN '星期4'
WHEN 4
THEN '星期5'
WHEN 5
THEN '星期6'
WHEN 6
THEN '星期日'
END AS WEEK, WEEKDAY(NOW()), NOW(), DAYNAME(NOW());