`
liangfeng366
  • 浏览: 76480 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

mysql分组查询把字段用逗号隔开

 
阅读更多
GROUP_CONCAT()是MySQL数据库提供的一个函数,通常跟GROUP BY一起用,并把查询的字段逗号分隔开,只支持字符类型的字段,整数型须要特殊写法。

下面是一些使用注意事项:

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。
分享到:
评论

相关推荐

    MySQL将一个字段中以逗号分隔的取出来形成新的字段实现

    1例如:要把如图1的字段拆分图2 select account_id, substring_index(substring_index(a.related_shop_ids,',' ,b.help_topic_id+1),',',-1) shopid from sales_hang_account a join mysql.help_topic b ...

    MySQL中将一列以逗号分隔的值行转列的实现

    前言 有时会遇到没有遵守第一范式设计模式的业务表。即一列中存储了多个属性值。如下表 pk value ...select distinct(substring_index(substring_index(a.col,',',b.help_topic_id+1),',',-1)) ...

    多字段 模糊查询 不要分

    效果看了才知道 好不好都给个回复 免费资源

    mysql导出指定数据或部份数据的方法

    这个时候mysqldump可能就不大好使了,使用下面的方法则可以解决这个问题。方法一、insert和select...在下面的例子中,生成一个文件,各值用逗号隔开。这种格式可以被许多程序使用。 代码如下:SELECT a,b,a+b INTO OUTF

    mysql利用group_concat()合并多行数据到一行

    假设b表中存在一字段name,现需要查询a表中的记录,同时获取存储在b表中的name信息,按照常规查询,b表中有多少记录,则会显示多少行,如果需要只显示a表记录行数,则需要把查询name字段得到的多行记录进行合并,...

    MYSQL常用命令大全

    但以前我用过的一个MYSQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win。  二、显示命令  1、显示数据库列表。  show databases;  刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的...

    MySQL命令大全

     ()在mysql的表中增加字段:  alter table dbname add column userid int(11) not null primary key auto_increment;  这样,就在表dbname中添加了一个字段userid,类型为int(11)。  7.mysql数据库的授权 ...

    关于mysql数据查询中 count()等聚集函数,关键字limit,group by,having的一些用法

    2、查询结果是多项的时候,用逗号隔开: 3、聚集函数count()的用法 count 也就是数量; 例如,查询表中选修CS课程的人数: 查询表中所有课程的选修人数: group by 表示 以······分组, 查询表中被选人数...

    Mysql排序和分页(order by&limit)及存在的坑

    排序查询(order by) 电商中:我们想查看今天所有成交的订单,按照交易额从... 支持多个字段进行排序,多字段排序之间用逗号隔开。 单字段排序 mysql> create table test2(a int,b varchar(10)); Query OK, 0 rows

    MySQL数据库:数据记录的修改二.pptx

    表名列表:包含了多个表的联合,各表之间用逗号隔开。 多表修改语法的其他部分与单表修改语法相同。 ;当用UPDATE修改多个表时,要修改的表名之间用逗号分开,字段名因为涉及到多个表,用“表名.字段名”表示,多表...

    ORACLE,mysql,sqlserver,sybase数据库装文本软件

    ip地址和端口,中间用冒号隔开 url不为空则此参数无效 如果不带端口,系统根据数据库类型采用默认端口 oracle数据库: 默认为1521端口 sqlserver数据库: 默认为1433端口 mysql数据库: 默认为3306端口 sybase...

    MySQL学习笔记3:表的基本操作介绍

    Query OK, 0 rows affected (0.11 sec) create table用于创建表,后面接表名称 括号内写的是字段名称和类型,逗号隔开,需要说明的是varchar是可变长度的字符串 这里的5行也可以写成一行,之所

    基于FMDB数据库操作类PYFMDB.zip

    按条件查询数据,指定字段,返回结果为NSArray 多个字段用半角逗号隔开NSString *where = @"name='\u5b9d\u9a6c'"; NSString *fields = @"id,wheels"; NSArray *results = [table selectWithWhere:where...

    2009达内SQL学习笔记

    为了按多个列排序,列名之间用逗号分开。 2、支持按相对列位置进行排序。 输入 SELECT prod_id,prod_price,prod_name FROM Products ORDER BY 2,3 --(2指price,3指name) 3、升序、降序。默认是升序(asc,...

    ssh(structs,spring,hibernate)框架中的上传下载

     本文选用的数据库为Oracle 9i,当然你可以在不改动代码的情况下,通过配置文件的调整将其移植到任何具有Blob字段类型的数据库上,如MySQL,SQLServer等。  总体实现  上传文件保存到T_FILE表中,T_FILE表结构...

    玩转模板--自动代码生成工程

    如果各位想用其他数据库,可以自己加载其他数据库的驱动,并修改一下DbOption类下的getTableColumns(String)方法中的查询表信息方法 以及添加类似dm2java.properties数据库类型到java数据类型的映射文件,不同数据库...

    易语言程序免安装版下载

    “库文件名”以.lib或.obj为后缀的将被视为静态库,可使用绝对路径或相对路径(相对当前源代码所在目录),如依赖多个静态库请分别列出并以逗号分隔;“在库中的对应命令名”请务必准确填写静态库中公开导出的符号...

Global site tag (gtag.js) - Google Analytics