时间处理
FROM_UNIXTIME
1
2UNIX时间戳转换为日期用函数:
select FROM_UNIXTIME(1156219870);UNIX_TIMESTAMP
1
2日期转换为UNIX时间戳用函数:
select UNIX_TIMESTAMP('2006-11-04 12:23:00');date_format
1
2查询当天的记录数:
DATE_FORMAT(FROM_UNIXTIME(ctime),'%Y-%m-%d') = curdate()N天内记录
1
select * from table_name where datediff(curdate(),from_unixtime(timestamp_colname,'%Y-%m-%d'))>=N;
字符串处理
IF
1
IF(expr,val1,val2) #判断expr,为真则val1,否则val2
IFNULL
1
select IFNULL(expr1,expr2) #非expr1则expr2
ISNULL
1
select ISNULL(null)
MID
1
2截取字符串
select MID(expr1,start,length) #start从0开始LOCATE
1
2判断字符位置
select LOCATE('ab','efgabc'[,pos]) #返回字符位置,从1开始,未找到返回0;pos参数可提供需要越过的查找offsetINSTR
1
2判断字符位置,参数与LOCATE相反,无pos参数
select INSTR('efgabc','ab')concat & concat_ws
1
2concat(str1,str2,[str3]...)
concat_ws(separator,str1,str2,[str3])group_concat
1
2
3
4
5
6
7
8列转行,默认,号分隔
group_concat(name separator ';') #指定分隔符
group_concat(name order by name desc) #指定排序
#这里有个坑,默认返回是有长度限制的,一般是1024
show variables like "group_concat_max_len";
#按需调整,当前生效
set GLOBAL group_concat_max_len=2048;ELT
1
2
3根据N的值选择第N个字符串
ELT(N,str1,str2,str3,...)
eg: select elt(1,'男','女'); #枚举性别FIND_IN_SET
1
2
3
4
5
6
7
8FIND_IN_SET(str,strlist)
eg1:in和FILD_IN_SET() 的区别
select id, list, name from table where FIND_IN_SET( 'daodao' , list)
所以如果list是常量(如:('libk', 'zyfon', 'daodao')),则可以直接用IN, 否则要用FIND_IN_SET()函数
eg2:按in排序
select * from article where id in(1,5,3) ORDER BY FIND_IN_SET('id','1,5,3');QUOTE
1
安全转义
trim
1
2
3
4
5
6
7
8mysql> SELECT TRIM(' bar ');
-> 'bar'
mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
-> 'barxxx'
mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
-> 'bar'
mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');
-> 'barx'未完待续。。。
如有疑问,请文末留言交流或邮件:newbvirgil@gmail.com 本文链接 : https://newbmiao.github.io/2015/09/23/mysql-common-function-accumulation.html