MYSQL与ORACLE 拼接字段

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值