常用函数
常用函数分为单行函数和聚合函数
1.数学函数
数学函数主要用来处理数值数据,主要的数学函数有:绝对值函数、三角函数(包括正弦函数、余弦函数、正切函数、余切函数等)、对数函数、随机数函数等。有错误产生时,数学函数将会返回空值null。
函数名 | 描述 | 实例 | 结果 |
pi() | 返回圆周率的值 | seelct pi(); | 3.141593 |
abs(x) | 返回x的绝对值 | select abs(-1005); | 1005 |
sqrt(x) | 返回非负数 x 的二次方根 | select sqrt(29); | 5.385164807134504 |
pow(x,y) | 返回 x 的 y 次乘方 | select pow(9, 5); | 59049 |
ceiling(x) | 返回大于 x 的最小整数值 | select ceiling(1005.5); | 1006 |
floor(x) | 返回小于 x 的最大整数值 | select floor(1005.6); | 1005 |
mod(x,y) | 返回x/y的模(余数) | select mod(10.52,3); | 1.52 |
round(x,y) |
返回参数 x 的四舍五入的 有 y 位小数的值 |
select round(10.05,2); |
10.05 |
truncate(x,y) | 返回数字 x 截断为 y 位小数的结果 | select truncate(1.00591,4); | 1.0059 |
rand() |
返回0到1内的随机值,可以通过提供一个参数(种子)使rand()随机数生成一个指定的值 |
select rand(); select rand(10); |
0.9522263807730995 0.6570515219653505 |
2.字符串函数
字符串函数主要用来处理数据库中的字符串数据,MySQL 中字符串函数有:计算字符串长度函数、字符串合并函数、字符串替换函数、字符串比较函数】查找指定字符串位置函数等。
函数名 | 描述 | 示例 | 结果 |
char_length(str) | 返回字符串str所含的字符个数 | select char_length('你好 xz'); | 5 |
length(str) | 返回字符串str中的字符的字节长度 | select length('你好 xz'); | 9 |
ascii(char) | 返回字符的ASCII码值 | select ascii('z'); | 122 |
concat(s1,s2..,sn) | 将s1,s2...,sn连接成一个字符串 | select concat('I ', 'am ' ,'fine'); | I am fine |
concat_ws(sep,s1,s2...,sn) | 将s1,s2...,sn连接成一个字符串,并用sep字符间隔 | select concat_ws('/', '2020','12','4'); | 2020/12/4 |
insert(str,x,y,instr) | 将字符串str从第x位置开始的y个字符长的字符串替换为字符串instr,返回结果 | select insert('you me',3,3,'and'); | yoande |
lcase(str) 或 lower(str) | 返回字符串str中所有字符改变为小写后的结果 |
select lcase('china'); select lower('china'); |
china china |
ucase(str) 或 upper(str) | 返回字符串str中所有字符改变为大写后的结果 |
select ucase('china'); select upper('china'); |
CHINA CHINA |
left(str, x) | 返回将字符串str中最左边的 x 个字符 | select left('hello', 2); | he |
right(str, x) | 返回将字符串str中最右边的 x 个字符 | select right('hello', 2); | lo |
ltrim(str) | 从字符串 str 中去掉开头的空格 |
select ltrim(' seanxiao') |
seanxiao |
instr(str,substr) | 返回字符串 substr 在字符串 str 第一个出现的位置 | select instr('seanxiao', 'ao'); | 7 |
position(substr in str) | 返回字符串 substr 在字符串 str 第一个出现的位置 | select position('i' in 'seanxiao'); | 6 |
reverse(str) | 返回颠倒字符串str的值 | select reverse('oaixnaes'); | seanxiao |
strcmp(s1, s2) | 比较字符串s1和s2,所有字符均相同,返回0;第一个小于第二个,返回-1,其他返回1 | select strcmp('xz', 'ab'); | 1 |
trim(str) | 去除字符串首部和尾部的所有空格 | select trim(' me '); | me |
lpad(st, len, padstr) rpad(st, len, padstr) |
用字符串 padstr 填补 st 左或右端,直到字符串长度为len |
select lpad('seanxiao', 10, '*' ); select rpad('seanxiao', 10, '*'); |
**seanxiao seanxiao** |
substring(str, n, len) | 从 str 字符串的第 n 个位置截取 len 长度个字符。n 若为负值,则从末尾倒数 |
select substring('seanxiao', -2, 3); |
ao |
replace(str, s1, s2) | 使用字符串s2替代字符串 str 中所有的字符串s1 | select replace('xxx.mysql.com', 'x', 'w'); | www.mysql.com |
space(n) | 返回一个由 n 个空格组成的字符串 | select concat('*', space(6), '*'); | * * |
3.日期和时间函数
日期和时间函数主要用来处理日期和时间值,一般大额日期函数除了使用 date 类型的参数外,也可以使用 datetime 或者 timestamp 类型的参数,但是忽略这些值的时间部分。相同的,以 time 类型值为参数的函数,可以接受 timestamp 类型的参数,但会忽略日期部分,许多日期函数可以同时接受数字和字符串类型的两种参数。
函数名 | 描述 | 实例 | 结果 |
curdate()或current_date()或current_date | 返回当前的日期 |
select current_date(); current_date(); |
2020-12-04| 2020-12-04 |
curtime()或current_time() | 返回当前的时间 | select curtime(),current_time(); | 10:48:22| 10:48:22 |
now() | 返回当前时间和日期 | select now(); | 2020-12-04 10:49:39 |
date_add(date,interval int keyword) | 返回日期date加上间隔时间的结果(int 必须按照关键字进行格式化) |
select date_add(current_date,interval 6 month); |
2021-06-04 |
dayofweek(date) | 返回date所代表的一个星期中的第几天(1~7) | select dayofweek('1991-10-05'); | 7 |
dayofmonth(date) | 返回date是一个月的第几天(1~31) | select dayofmonth('1999-09-15'); | 15 |
dayofyear(date) |
返回date是一年的第几天(1~366) |
select dayofyear('1991-10-05'); | 278 |
monthname(date) | 返回date是几月(按英文名返回) | select monthname('1991-10-05'); | October |
dayname(date) | 返回date的星期名 | select dayname(current_date); | Friday |
weekday(date) | 返回日期date是星期几(0 =星期一,以此类推) | select weekday(current_date); | 4 |
week(date) | 返回日期date为一年中第几周(0~53) | select week(current_date); | 48 |
year(date) | 返回日期date的年份(1000~9999) | select year(current_date); | 2020 |
hour(time) | 返回日期time的最小值(0~23) | select hour(current_time); | 11 |
date_format(date, fmt) | 依照指定的fmt格式格式化日期date值 | select date_format('2020-12-04', '%w %m %y'); | 5 12 20 |
date_format(date, fmt)函数中的fmt字符串中可用的格式
格式 | 描述 |
%a | 缩写星期名 |
%b | 缩写月名 |
%c | 月,数值 |
%D | 带有英文前缀的月中的天 |
%d | 月的天,数值(00-31) |
%e | 月的天,数值(0-31) |
%f | 微秒 |
%H | 小时(00-23) |
%h | 小时(01-12) |
%I | 小时(01-12) |
%i | 分钟,数值(00-59) |
%j | 年的天(001-366) |
%k | 小时(0-23) |
%l | 小时(1-12) |
%M | 月名 |
%m | 月,数值(00-12) |
%p | AM或PM |
%r | 时间,12-小时(hh:mm:ss AM 或 PM) |
%S | 秒(00-59) |
%s | 秒(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位 |
4.转换函数
使用类型转换函数可以在各种类型数据之间转换数据类型。MySQL中常有的转换函数有cast() 和 convert() 函数,可用来获取一个类型的值,并产生另一个类型的值。
1)cast(value as type),即cast(xxx as 类型)
2)convert(value, type) ,即convert(xxx, 类型)
5.聚合函数
select子句的表达式中可以包含聚合函数。聚合函数常常用于对一组值进行计算,然后返回单个值。
函数名 | 描述 | 实例 |
avg(all | distinct | col) | 返回指定字段的平均值 | select avg(age) from stu; |
count(all | distinct | col | *) | 返回指定字段中非null值的个数 | select count(*) from stu; |
min(all | distinct | col) | 返回指定字段的最小值 | select min(age) from stu; |
max(all | distinct | col) | 返回指定字段的最大值 | select max(age) from stu; |
sum(all | distinct | col) | 返回指定字段所有的所有值 | select sum(score) from stu; |
group_concat(col) | 返回由属于一组的字段值连接组合而成的结果 | select class, group_concat(name) from stu group by class; |
6.条件判断函数
条件判断函数也称为流程流程函数,根据满足的条件的不同,执行相关的流程。
(1) if(expr,v1,v2)函数
如果表达式expr是true(expr != 0 and expr != null ),if() 的返回值为v1;否则返回值为v2。if() 的返回值为数值或字符串值,具体情况是其所在语境而定。
(2) ifunll(v1,v2)函数
假如 v1 不为 null,则 ifnull() 的返回值为 v1;否则其返回值为 v2。ifnull() 的返回值是数字或字符串,具体情况取决于其所在的语境。