1、mysql
1.1、CONCAT函数
concat函数是将多个字段或字符串拼接为一个字符串;但是字符串之间没有任何分隔;
-- CONCAT函数的语法如下:
CONCAT(str1,str2,...)
SELECT CONCAT(字符串1,字符串2,字符串3,...) ;
SELECT CONCAT('沈','李','王') user;
--沈李王
如果拼接的字段中有一个为null,则结果为null;
SELECT CONCAT(字符串1,字符串2,字符串3,...) ;
--含有NULL字符串
SELECT CONCAT('沈',NULL,'李') user;
-- NULL
// mysql可以直接拼接
select * from AAA where name like "%333%";
// mysql中有专门的拼接函数concat,注意concat在mysql中可以有两个以上的参数!
// 但在oracle中只能最多两个参数!
select * from AAA where name like concat("%",“333","%");
1.2、CONCAT_WS函数
concat_ws函数将多个字段或字符串拼接为一个字符串,且字符串直接可以指定分隔符;
-- CONCAT_WS函数的语法如下:
CONCAT_WS(separator,str1,str2,...)
-- 拼接非空字段
SELECT CONCAT_WS('/',id,name,age) result from user;
-- 拼接字段
SELECT CONCAT_WS('/','1','沈','30') user;
-- 1/沈/30
-- 拼接空NULL字段
SELECT CONCAT_WS('/','沈',NULL,'李') user;
--沈李
1.3、GROUP_CONCAT函数
group_concat函数可以将多行字段数据合并为一行;且内容之间可以指定分隔符;
-- group_concat函数的语法如下:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val]
[LIMIT {[offset,] row_count | row_count OFFSET offset}])
- 默认以逗号分隔符连接
-- 默认的逗号分隔
SELECT GROUP_CONCAT(字段名) from 表名;
SELECT GROUP_CONCAT(name) from user;
-- 赵,钱,孙,李,周,吴,郑,王
-
自定义分隔符
-- 自定义字符串分隔符
SELECT GROUP_CONCAT(字段名 SEPARATOR '分隔符号') from 表名;
SELECT GROUP_CONCAT(name SEPARATOR ';') from user;
-- 赵;钱;孙;李;周;吴;郑;王
- 将整数转为字符串
-- 将整数字段转为字符
SELECT GROUP_CONCAT(CAST(字段名 as CHAR) SEPARATOR '分隔符号') from 表名;
SELECT GROUP_CONCAT(CAST(age as CHAR) SEPARATOR ';') from user;
-- 12;1;34;12;33
- 多字段拼接
-- 多字段拼接
SELECT GROUP_CONCAT(字段1,字段2,字段3 SEPARATOR '分隔符号') from 表名;
SELECT GROUP_CONCAT(id,name,age SEPARATOR ';') from user;
-- 1沈30;2李28;3程58
- 字段去重排序和自定义分隔
-- 字段去重排序和自定义分隔
SELECT GROUP_CONCAT(DISTINCT 字段名 ORDER BY 字段名 asc或desc SEPARATOR '分隔符号') from 表名;
SELECT GROUP_CONCAT(DISTINCT age ORDER BY age DESC SEPARATOR ';') from user;
-- 23;12;4
- group_concat的限制和设置
查看当前group_concat函数的长度
-- 查看当前group_concat函数的长度
show variables like 'group_concat_max_len';
设置当前Session的group_concat函数的长度,不影响其他的Session
-- 设置当前Session的group_concat的长度为1M
SET SESSION group_concat_max_len = 1048576;
设置全局 group_concat函数的长度,需断开后重新连接才生效
-- 设置全局 group_concat函数的长度,需断开后重新连接才生效
SET GLOBAL group_concat_max_len = 1048576;
2、oracle
select 'c' || ',' || 'd' from test
-- c,d
select 'c' || ',' || 'b' || '/' || 'C' from test
-- c,b/C"
// oracle可以直接拼接,但必须使用 ||
select * from goods where goods.name like '%' || '瓦' || '%';
// oracle中也提供了concat函数,但参数最多两个
select * from AAA where name like concat('%','333%');
3、mybatis或mybatisplus中,mysql 和 oracle 都可以使用${}和#{}注入
// Oracle
like '%' || #{name} || '%'
like '%${name}%'
// Mysql
like concat("%", #{name},"%");
like concat("%", '${name}',"%");
// Limit 分页
limit ${(pageNo-1) * pageSize},${pageSize}
4、${…} & #{…}
${}
:直接填充,即解析出来的参数值不带单引号#{}
会预编译,即解析传过来参数带单引号
// 如果入参是table = AAA, name = ccshen, pageNo = 1, pageSize = 10
select * from ${table} where name = #{name} limit ${(pageNo-1) * pageSize},${pageSize}
--> select * from AAA where name = 'ccshen' limit 0,10