`
ocre
  • 浏览: 57853 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

concat 和 group_concat的陷阱

    博客分类:
  • sql
阅读更多

group_concat:

MySQL中group_concat函数能将相同的行组合起来

完整的语法如下:

group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])


使用示例:

 

select * from aa;
 

+------+------+
| id| name |
+------+------+
|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200 |
|3 | 500 |
+------+------+
6 rows in set (0.00 sec)

select id,group_concat(name) from aa group by id; 

 

+------+--------------------+
| id| group_concat(name) |
+------+--------------------+
|1 | 10,20,20|
|2 | 20 |
|3 | 200,500|
+------+--------------------+
3 rows in set (0.00 sec)

1.int字段的连接陷阱

当你用group_concat的时候请注意,连接起来的字段如果是int型,一定要转换成char再拼起来,
否则在你执行后(ExecuteScalar或者其它任何执行SQL返回结果的方法)返回的将不是一个逗号隔开的串,
而是byte[]。

该问题当你在SQLyog等一些工具中是体现不出来的,所以很难发现。

select group_concat(ipaddress) from t_ip 返回逗号隔开的串
select group_concat(id) from t_ip 返回byte[]
select group_concat(CAST(id as char)) from t_dep 返回逗号隔开的串
select group_concat(Convert(id , char)) from t_dep 返回逗号隔开的串

附Cast,convert的用法:
CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。

这个类型 可以是以下值其中的 一个:

BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

2.长度陷阱
用group_concat连接字段的时候是有长度限制的,并不是有多少连多少。但你可以设置一下。

使用group_concat_max_len系统变量,你可以设置允许的最大长度。
程序中进行这项操作的语法如下,其中 val 是一个无符号整数:
SET [SESSION | GLOBAL] group_concat_max_len = val;
若已经设置了最大长度, 则结果被截至这个最大长度。

在SQLyog中执行 SET GLOBAL group_concat_max_len = 10 后,重新打开SQLyog,设置就会生效。

请注意,这种方式只是临时的,如要长久的修改,则需要修改mysql的配置节。

到my.cnf的mysqld节点下加上group_concat_max_len =99999……

重启mysql。



concat:

用来连接字段,或者字符。但是只要被连接的字段中有一个值为null,则concat得到的就是null。

这是个非常危险的玩意。我相信用concat连接多个字段的人想要的结果多半不是这样:

concat(A,B),如果B为null,那么concat(A,B)=null

我们想要的是这样的:

连接A,B,如果B为null,那么连接后应该是A。

这时应该用CONCAT_WS(separator,   str1,   str2,...)

 

分享到:
评论

相关推荐

    【GROUP_CONCAT】使用之MySQL官方文档翻译

    ### GROUP_CONCAT 函数详解 #### 一、概述 `GROUP_CONCAT` 是 MySQL 中一个非常实用的聚合函数,主要用于将来自同一分组的多个值连接成一个字符串。这一功能在许多场景下都非常有用,例如汇总数据、创建列表等。 ...

    如何修改Mysql中group_concat的长度限制

    `GROUP_CONCAT`函数还支持一些额外的选项,使得其更加强大和灵活: - **指定分隔符**:你可以自定义分隔符,例如使用下划线 `_`: ```sql SELECT GROUP_CONCAT(f_a SEPARATOR '_') FROM t_one GROUP BY f_b; ```...

    MySQL GROUP_CONCAT限制解决方案

     GROUP_CONCAT函数可以拼接某个字段值成字符串,默认的分隔符是 逗号,即”,” ,  如果需要自定义分隔符可以使用 SEPARATOR  如: SELECT GROUP_CONCAT(name SEPARATOR '_') FROM user 限制:  GROUP_CONCAT...

    Mysql的GROUP_CONCAT()函数使用方法

    MySQL中的GROUP_CONCAT()函数是一个非常实用的聚合函数,它允许你在分组查询时将同一组内的多个值合并成一个字符串。此函数主要用于数据分析和报表生成,尤其在处理多对多关系的数据时,能简化数据处理流程。在本文...

    MySQL统计函数GROUP_CONCAT使用陷阱分析

    然而,使用`GROUP_CONCAT`时存在一些潜在的陷阱,这些陷阱可能会导致数据丢失或不完整的输出。本文将深入探讨这些问题并提供解决方案。 首先,`GROUP_CONCAT`函数存在一个默认的最大长度限制,这个长度由系统变量`...

    SqlServer GroupConcat

    `SqlServer GroupConcat`的CLR实现是为了解决SQL Server中缺乏类似MySQL `GROUP_CONCAT`功能的问题。CLR(Common Language Runtime)是.NET框架的一部分,允许开发者使用各种编程语言(如C#、VB.NET等)编写存储过程...

    DB2函数名称及举例

    - **解释**:此语句用于计算表`BSEMPMS`中的`SALARY`和`BONUS`字段之间的相关性。 3. **COUNT()** - **描述**:计算行数。 - **示例**: ```sql SELECT COUNT(*) FROM BSEMPMS; ``` - **解释**:此语句用于...

    wm_concat函数所需资源包

    例如,如果你有一个包含员工ID和部门的表,你可以使用`WM_CONCAT`来获取每个部门所有员工ID的列表。其基本语法如下: ```sql SELECT department_id, WM_CONCAT(employee_id) FROM employees GROUP BY department_id...

    MySQL中group_concat函数深入理解

    MySQL中的`GROUP_CONCAT`函数是一个非常实用的聚合函数,它允许你在分组查询中将一组行的某个列值合并成一个字符串,每个值之间由指定的分隔符隔开。这个函数对于数据汇总和报告生成特别有用,因为它可以把多行数据...

    group_concatenate与locate的联合用法示例

    在SQL查询中,`GROUP_CONCAT` 和 `LOCATE` 是两个非常实用的函数,它们分别用于处理分组数据的聚合和字符串定位。本篇文章将详细介绍这两个函数的用途以及它们如何联合使用,以帮助你更好地理解和应用在实际的数据库...

    Mysql5.7中使用group concat函数数据被截断的问题完美解决方法

    在MySQL 5.7中,`GROUP_CONCAT`函数用于将分组后的多个行合并成一个字符串,通常在聚合查询中使用。然而,当使用此函数时,可能会遇到数据被截断的问题,尤其是在处理较长的字符串时。这个问题源于MySQL的一个系统...

    浅谈MySQL中group_concat()函数的排序方法

    总的来说,`GROUP_CONCAT()` 函数是MySQL中处理聚合数据的一个强大工具,结合 `ORDER BY` 子句,可以实现对合并后的值进行排序,进一步提升数据的可读性和分析效率。在进行复杂数据整理和分析时,熟练掌握这一功能将...

    db2函数大全,使用方法

    DB2 函数大全是 DB2 数据库管理系统中提供的一组函数,用于进行数据处理和分析。本文将对 DB2 函数大全进行总结,包括 AVG、CORR、COUNT、COVAR、MAX、MIN、STDDEV、SUM、VAR 等函数,并提供相应的函数解释和举例。 ...

    GROUP_CONCAT的用法

    GROUP_CONCAT 函数的用法和应用 GROUP_CONCAT 函数是 MySQL 数据库中一个非常有用的聚合函数,它可以将一个分组中的值连接起来,返回一个字符串结果。下面我们将详细介绍 GROUP_CONCAT 函数的用法和应用。 GROUP_...

    mysql group_concat()函数用法总结

    MySQL中的`GROUP_CONCAT()`函数是一个非常实用的聚合函数...不过,合理地使用`GROUP BY`子句和理解`group_concat_max_len`的限制对于正确运用这个函数至关重要。在设计查询时,务必考虑这些因素以确保得到期望的结果。

    wm_concat函数DDL.zip

    例如,如果你有一个包含产品ID和名称的表,你可以使用`wm_concat`来获取每个分类的所有产品ID或名称的列表。但在Oracle 11g及以后版本,你需要使用其他内置函数或者自定义函数来实现相同的功能。 自定义`wm_concat`...

    Oracle新版中不支持 WM_CONCAT的处理方法

    Oracle新版中不支持 WM_CONCAT的处理方法,直接创建一个自定义函数代替

Global site tag (gtag.js) - Google Analytics