针对工作中用到的mysql语法做一个记录,随时更新.
1.判断语句
使用(case table_field when field_value1 then 自定义值1 when field_value2 then 自定义值2 else 自定义值3 end ) as alias
当字段(table_field)值为field_value1时,则定义的别名(alias)取值为自定义值1;
当字段(table_field)值为field_value2时,则定义的别名(alias)取值为自定义值2;
当字段(table_field)值没有匹配到任意值时,则定义的别名(alias)取值为自定义值3;
eg:
select name,sex,(case sex when '1' then '男' when '0' then '女' else '未知性别' end) as sex_desc,age from user;
2.模糊查询
一般情况下,我们自己写模糊查询sql都是通过关键字like
实现,比如:name like %小%
,但是这种方式针对一些特殊字符会失去作用,比如特殊字符_
和?
等.
在mysql中%和_都是含有特殊含义的,%表示任意字符,_表示一个字符,比如%小%表示’小’前后包含任意字符的都匹配,_小表示’小’前面只能含一个字符才匹配,所以使用like关键字不能模糊查询含有下划线的字符,这样查询到的是全部数据;
解决方式1:
使用关键字regexp
,比如:name regexp '小'
,这种方式和上面的name like %小%
作用一样,这种方式可以解决字符包含有_
的情况,比如name regexp '_'
eg:
select * from user where name REGEXP '_';
但是方式1针对特殊字符?
则不好使,会报语法错误:
所以推荐使用方式2:使用mysql内置函数locate('需要匹配的字符',被匹配的字段) > 0
eg:
select * from user where LOCATE('?',name) > 0;
select * from user where LOCATE('_',name) > 0;
select * from user where LOCATE('小',name) > 0;
3.MySql字段截取,字符串拆分SUBSTRING_INDEX
SUBSTRING_INDEX(‘a,b,c’,‘,’,1) 截取第一个逗号(,)号以前的字符串,即结果为a;
SUBSTRING_INDEX(‘a,b,c’,‘,’,2) 截取第二个逗号(,)号以前的字符串,即结果为a,b;
SUBSTRING_INDEX(‘a,b,c’,‘,’,-1) 截取倒数第一个逗号(,)号以后的字符串,即结果为c;
4.MySql字段替换,字符串替换replace( str, from_str, to_str)
name = “abcd_efg”
replace( name, '‘, ‘’) 替换name字段中’‘字符为’'空串,即结果为"abcdefg";
5.MySql查询字段不为null的数据
select * from person where name IS NOT NULL
或者
select * from person where NOT ISNULL(name)
上面两个sql在sql软件都可以执行,但是mapper文件里面第二种会报错,建议使用第一种