博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle函数
阅读量:6219 次
发布时间:2019-06-21

本文共 3182 字,大约阅读时间需要 10 分钟。

hot3.png

oracle函数 WMSYS.WM_CONCAT的使用

select aa,wmsys.wm_concat(t1.name) from (select t.name,to_char(t.createdate,'yyyy-mm-dd') aa from td_user t where t.td_conference_id = 3218 and t.status = 1 and t.createdate > to_date('2012-10-28','yyyy-mm-dd') order by createdate desc) t1 group by t1.aa

mysql 函数 GROUP_CONCAT 的使用

2、mysql 函数 GROUP_CONCAT 的使用

GROUP_CONCAT()是MySQL数据库提供的一个函数,通常跟GROUPBY一起用,具体可参考MySQL官方文挡:

完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

基本查询 mysql> select * from aa; +------+------+ | id| name | +------+------+ |1 | 10| |1 | 20| |1 | 20| |2 | 20| |3 | 200 | |3 | 500 | +------+------+ 6 rows in set (0.00 sec)

以id分组,把name字段的值打印在一行,逗号分隔(默认) mysql> 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)

以id分组,把name字段的值打印在一行,分号分隔 mysql> select id,group_concat(name separator ';') from aa group by id; +------+----------------------------------+ | id| group_concat(name separator ';') | +------+----------------------------------+ |1 | 10;20;20 | |2 | 20| |3 | 200;500 | +------+----------------------------------+ 3 rows in set (0.00 sec)

以id分组,把去冗余的name字段的值打印在一行, 逗号分隔

mysql> select id,group_concat(distinct name) from aa group by id; +------+-----------------------------+ | id| group_concat(distinct name) | +------+-----------------------------+ |1 | 10,20| |2 | 20 | |3 | 200,500 | +------+-----------------------------+ 3 rows in set (0.00 sec)

以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序 mysql> select id,group_concat(name order by name desc) from aa group by id; +------+---------------------------------------+ | id| group_concat(name order by name desc) | +------+---------------------------------------+ |1 | 20,20,10 | |2 | 20| |3 | 500,200| +------+---------------------------------------+ 3 rows in set (0.00 sec)

需要注意的: a.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 USINGtranscoding_name) CAST() 和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。

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

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

b.长度陷阱 用了group_concat后,select里如果使用了limit是不起作用的. 用group_concat连接字段的时候是有长度限制的,并不是有多少连多少。但你可以设置一下。

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

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

SELECT * FROM COUNT where denttime >=date '2009-1-1' AND denttime < date'2010-12-31'+1 ORDER BY denttime

最好把时间也加上 where denttime >= to_date('2009-1-1 00:00:01' ,'YYYY-MM-DD HH24:MI:SS') and denttime < to_date('2010-12-31 23:59:59' ,'YYYY-MM-DD HH24:MI:SS')

转载于:https://my.oschina.net/miaojiangmin/blog/1545804

你可能感兴趣的文章
邮件移动客户端之战,谁才是真正的赢家
查看>>
基于Docker Container运行Flink1.7.1 Local Cluster模式
查看>>
git 命令
查看>>
Leap Motion API类库:KeyTapGesture
查看>>
搜狗输入法加入搜索引擎的新功能
查看>>
lucene之索引创建
查看>>
40个新鲜出炉的 jQuery 插件和免费教程【上篇】 转载自:梦想天空
查看>>
PL/SQL使用instantclient连接oracle配置
查看>>
进入有密码的windows系统
查看>>
HDU-1052 划水记录1
查看>>
我的友情链接
查看>>
【Spark 深入学习-08】说说Spark分区原理及优化方法
查看>>
PWA简介
查看>>
rsync同步服务器配置指南
查看>>
[Windows Azure] Building the web role for the Windows Azure Email Service application - 3 of 5
查看>>
Linux下源代码阅读工具
查看>>
【1】安装rabbitmq server
查看>>
我的友情链接
查看>>
Java 8学习之Lambda表达式
查看>>
Spring Batch
查看>>