字符串函数
函数 |
描述 |
示例 |
CONCAT_WS(x, s1,s2…sn) |
字符串 s1,s2 等多个字符串合并为一个字符串,每个字符串之间要加上 x,x 可以是分隔符 |
select concat_ws(‘-‘,’a’,’b’,’c’); 结果:a-b-c |
FIELD(s,s1,s2…) |
返回第一个字符串 s 在字符串列表(s1,s2…)中的位置 |
select field(‘a’,’b’,’c’,’a’,’a’); 结果:3 |
FIND_IN_SET(s1,s2) |
返回在字符串s2中与s1匹配的字符串的位置,s2通常是逗号分隔的字符串,s1,s2可以是表的字段,但s2需要以逗号分隔 |
SELECT FIND_IN_SET(‘b’, ‘a,b,b,c,d,e’); 结果:2 SELECT FIND_IN_SET(‘add’, permissions) from user; 查找user表的permissions字段是否存在字符串:add |
FORMAT(x,n) |
将数字 x 进行格式化 “#,###.##”, 将 x 保留到小数点后 n 位,最后一位四舍五入。 |
select format(1414151278324.4263461, 2); 结果:1,414,151,278,324.43 |
INSERT(s1,x,len,s2) |
字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串 |
select insert(‘testabc’,4,5, ‘zxcvbkjk’); 输出:teszxcvbkjk select insert(‘testabc’,4,2, ‘zxcvbkjk’); 输出:teszxcvbkjkbc |
LOCATE(s1,s) |
从字符串 s 中获取 s1 的开始位置 |
select LOCATE(‘abc’,’123abcabc’); 结果:4 select LOCATE(‘abc1′,’123abcabc’); 结果:0 |
LEFT(s,n) |
返回字符串 s 的前 n 个字符 |
select LEFT(‘njlaffgf’,3); 结果:njl
|
LPAD(s1,len,s2) |
在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len |
select lpad(‘abc’,5,’0000′); 结果:00abc select lpad(‘abc’,3,’0000′); 结果:abc |
POSITION(s1 IN s) |
从字符串 s 中获取 s1 的开始位置,s1和s可以是表的两个字段 |
select position(‘abc’ in ‘123abc456’); 结果:4 select position(name in email) from user; |
REPEAT(s,n) |
将字符串 s 重复 n 次 |
select repeat(‘123’,3); 结果:123123123 select REPEAT(name,3) from user; |
REPLACE(s,s1,s2) |
将字符串 s2 替代字符串 s 中的字符串 s1 |
select replace(‘abc123def’,’123′,’***5′); 结果:abc***5def |
RIGHT(s,n) |
返回字符串 s 的后 n 个字符 |
select right(‘abc123’,2); 结果:23 select right(email,3) from user; |
RPAD(s1,len,s2) |
在字符串 s1 的结尾处添加字符串 s2,使字符串的长度达到 len |
select rpad(‘abc’,5,’0000′); 结果:abc00 select rpad(‘abc’,3,’0000′); 结果:abc |
数字函数
函数 |
描述 |
示例 |
CEIL(x) |
返回大于或等于 x 的最小整数 |
select ceil(1.6) 结果:2 select ceil(-1.6) 结果:-1 |
FLOOR(x) |
返回小于或等于 x 的最大整数 |
select floor(1.6) 结果:1 select floor(-1.6) 结果:-2 |
GREATEST(expr1, expr2, expr3, …) |
返回列表中的最大值 |
select greatest(4,2,6,2,555.22,23); 结果:555.22 select greatest(‘abc’,’zzx’,’zbc’); 结果:zzx select greatest(age, version) from user; |
LEAST(expr1, expr2, expr3, …) |
返回列表中的最小值 |
select least(4,2,6,2,555.22,23); 结果:2.00 select least(‘abc’,’zzx’,’zbc’); 结果:abc select least(age, version) from user; |
RAND() |
返回 0 到 1 的随机数 |
select rand(); 结果:0.5861002519597301 |
ROUND(x [,y]) |
返回离 x 最近的整数,可选参数 y 表示要四舍五入的小数位数,如果省略,则返回整数。 |
SELECT ROUND(1.23456); 结果:1 SELECT ROUND(345.156, 2); 结果:345.16 |
TRUNCATE(x,y) |
返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入) |
SELECT truncate(345.156, 2); 结果:345.15 |
日期函数
函数 |
描述 |
示例 |
ADDDATE(d,n) |
计算起始日期 d 加上 n 天的日期 |
select adddate(current_timestamp, 3); 结果:2023-03-30 10:35:54 select adddate(current_timestamp, -3); 结果:2023-03-24 10:36:07 select adddate(current_timestamp,interval 10 hour ) 结果:2023-03-27 20:36:20 select adddate(current_timestamp,interval -10 hour ) 结果:2023-03-27 00:36:34 |
ADDTIME(t,n) |
n 是一个时间表达式,时间 t 加上时间表达式 n |
n是数字式,默认是秒 select addtime(‘2023-03-27 10:41:42’,5); 当前:2023-03-27 10:41:42,结果:2023-03-27 10:41:47 select addtime(‘2023-03-27 10:41:42′,’2:00:00’); 当前:2023-03-27 10:41:42,结果:2023-03-27 12:41:42 |
DATEDIFF(d1,d2) |
计算日期 d1->d2 之间相隔的天数 |
select datediff(‘2023-03-27 10:46:58′,’2023-03-29 10:46:58’) 结果:-2 |
DATE_ADD(d,INTERVAL expr type) |
计算起始日期 d 加上一个时间段后的日期,type 值可以是:
|
select date_add(‘2023-03-27 10:46:58’,interval 5 hour); 结果:2023-03-27 15:46:58 select date_add(‘2023-03-27 10:46:58’,interval 5-3 day); 结果:2023-03-29 10:46:58 |
DATE_FORMAT(d,f) |
按表达式 f的要求显示日期 d |
select date_format(current_timestamp,’%Y/%m/%d %H:%i:%S’); 结果:2023/03/27 11:16:04 |
DATE_SUB(date,INTERVAL expr type) |
从日期减去指定的时间间隔。 |
select date_sub(‘2023-03-27 10:46:58’, interval 3 hour ); 结果:2023-03-27 07:46:58 select date_sub(‘2023-03-27 10:46:58’, interval -3 hour ); 结果:2023-03-27 13:46:58 |
EXTRACT(type FROM d) |
从日期 d 中获取指定的值,type 指定返回的值。
|
select extract(minute from ‘2023-03-27 10:46:58’); 结果:46 |
unix_timestamp(d) |
d是日期格式参数,日期格式转时间戳 |
select unix_timestamp(‘2023/3/27 12:00:00’); 结果:1679889600 |
from_unixtime(t) |
t是整型参数,时间戳转日期格式 |
select from_unixtime(1679889600); 结果:2023-03-27 12:00:00 |
高级函数
函数 |
描述 |
示例 |
IF(expr,v1,v2) |
如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。 |
select IF(0,’success’,’error’); 结果:error select IF(3>2,’success’,’error’); 结果:success |
IFNULL(v1,v2) |
如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。 |
select ifnull(null, ‘default’); 结果:default select ifnull(6, ‘default’); 结果:6 select ifnull(product_code,’NONE’) from t_product; |
ISNULL(expression) |
判断表达式是否为 NULL |
select isnull(null) 结果:1 select isnull(5) 结果:0 |
… |
日期时间格式化
格式 |
描述 |
%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 位 |
原文始发于微信公众号(小新成长之路):mysql常用函数备忘录
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/238649.html