--各种字符串分函数

--3.3.1 使用游标法进行字符串合并处理的示例。
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3

--合并处理
--定义结果集表变量
DECLARE @t TABLE(col1 varchar(10),col2 varchar(100))

--定义游标并进行合并处理
DECLARE tb CURSOR LOCAL
FOR
SELECT col1,col2 FROM tb ORDER BY  col1,col2
DECLARE @col1_old varchar(10),@col1 varchar(10),@col2 int,@s varchar(100)
OPEN tb
FETCH tb INTO @col1,@col2
SELECT @col1_old=@col1,@s=''
WHILE @@FETCH_STATUS=0
BEGIN
 IF @col1=@col1_old
  SELECT @s=@s+','+CAST(@col2 as varchar)
 ELSE
 BEGIN
  INSERT @t VALUES(@col1_old,STUFF(@s,1,1,''))
  SELECT @s=','+CAST(@col2 as varchar),@col1_old=@col1
 END
 FETCH tb INTO @col1,@col2
END
INSERT @t VALUES(@col1_old,STUFF(@s,1,1,''))
CLOSE tb
DEALLOCATE tb
--显示结果并删除测试数据
SELECT * FROM @t
DROP TABLE tb
/*--结果
col1       col2
---------- -----------
a          1,2
b          1,2,3
--*/
GO

/*==============================================*/

--3.3.2 使用用户定义函数,配合SELECT处理完成字符串合并处理的示例
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3
GO

--合并处理函数
CREATE FUNCTION dbo.f_str(@col1 varchar(10))
RETURNS varchar(100)
AS
BEGIN
 DECLARE @re varchar(100)
 SET @re=''
 SELECT @re=@re+','+CAST(col2 as varchar)
 FROM tb
 WHERE col1=@col1
 RETURN(STUFF(@re,1,1,''))
END
GO

--调用函数
SELECT col1,col2=dbo.f_str(col1) FROM tb GROUP BY col1
--删除测试
DROP TABLE tb
DROP FUNCTION f_str
/*--结果
col1       col2
---------- -----------
a          1,2
b          1,2,3
--*/
GO

/*==============================================*/

--3.3.3 使用临时表实现字符串合并处理的示例
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3

--合并处理
SELECT col1,col2=CAST(col2 as varchar(100))
INTO #t FROM tb
ORDER BY col1,col2
DECLARE @col1 varchar(10),@col2 varchar(100)
UPDATE #t SET
 @col2=CASE WHEN @col1=col1 THEN @col2+','+col2 ELSE col2 END,
 @col1=col1,
 col2=@col2
SELECT * FROM #t
/*--更新处理后的临时表
col1       col2
---------- -------------
a          1
a          1,2
b          1
b          1,2
b          1,2,3
--*/
--得到最终结果
SELECT col1,col2=MAX(col2) FROM #t GROUP BY col1
/*--结果
col1       col2
---------- -----------
a          1,2
b          1,2,3
--*/
--删除测试
DROP TABLE tb,#t
GO

/*==============================================*/

--3.3.4.1 每组 <=2 条记录的合并
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'c',3

--合并处理
SELECT col1,
 col2=CAST(MIN(col2) as varchar)
  +CASE
   WHEN COUNT(*)=1 THEN ''
   ELSE ','+CAST(MAX(col2) as varchar)
  END
FROM tb
GROUP BY col1
DROP TABLE tb
/*--结果
col1       col2     
---------- ----------
a          1,2
b          1,2
c          3
--*/

--3.3.4.2 每组 <=3 条记录的合并
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3
UNION ALL SELECT 'c',3

--合并处理
SELECT col1,
 col2=CAST(MIN(col2) as varchar)
  +CASE
   WHEN COUNT(*)=3 THEN ','
    +CAST((SELECT col2 FROM tb WHERE col1=a.col1 AND col2 NOT IN(MAX(a.col2),MIN(a.col2))) as varchar)
   ELSE ''
  END
  +CASE
   WHEN COUNT(*)>=2 THEN ','+CAST(MAX(col2) as varchar)
   ELSE ''
  END
FROM tb a
GROUP BY col1
DROP TABLE tb
/*--结果
col1       col2
---------- ------------
a          1,2
b          1,2,3
c          3
--*/
GO

转载于:https://www.cnblogs.com/dushu/archive/2012/05/18/2507491.html

各种字符串合并处理示例.sql相关推荐

  1. Sql Server中三种字符串合并方法的性能比较

    最近正在处理一个合并字符吕的存储过程,在一个测试系统的开发中,要使用到字符串合并功能,直接在Sql中做.         示例:         有表內容﹕         名称  內容        ...

  2. 04. 字符串合并与拆分写法小结

    04. 字符串合并与拆分写法小结 原文:04. 字符串合并与拆分写法小结 一. 字符合并 if OBJECT_ID('ConcatStr') is not null drop table Concat ...

  3. access 合并多行字符串_八种方法玩转字符串合并,这篇文章全都给你讲明白!...

    在日常工作过程中,经常会遇到要把一串字符拼接到一起的情况. 你是不是还一直在用"&"连接符来合并字符串呢?当遇到很多个字符串需要合并的时候,这种方法又费时又费力,那有没有其 ...

  4. 牛客网--字符串合并处理(Java)

    按照指定规则对输入的字符串进行处理. 详细描述: 将输入的两个字符串合并. 对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序.这里的下标意思是字符在字符串中的位置. ...

  5. 华为机试HJ30:字符串合并处理

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 按照指定规则对输入的字符串进行处理. 详细描述: 将输入的两个字符串合并. 对合并后 ...

  6. java通过+拼接字符串导致的无效SQL,三目运算符与+运算符结合使用时需要注意了

    调试代码的过程中遇到一个比较尴尬的问题,java代码中先进行sql拼接,然后再执行拼接后的sql,即一个又臭又长的字符串.设计到sql拼接的情况,我个人比较喜欢用StringBuilder拼接,毕竟使 ...

  7. SQL-SERVER的STUFF函数group by 分组,字符串合并

    SQL SERVER 分组group by之后,字符串合并在一起,逗号隔开. 原本数据: 效果: 代码: -use DB01; -- 建表 create table dbo.tb_user_produ ...

  8. 两个byte数组拼接_java中两个byte数组实现合并的示例

    java中两个byte数组实现合并的示例 今天在于硬件进行交互的过程中,要到了了需要两个数组进行合并,然后对数组进行反转和加密操作,以下是两个byte数组合并的方法. /** * * @param d ...

  9. python3 List 中的字符串合并

    s1 = 'abcd' s2 = '1234' # 字符串合并 print(str.__add__(s1,s2)) print(str.__gt__(s1,s2)) # 字符串合并 # 如果list有 ...

最新文章

  1. 深入理解JVM虚拟机(九):运行期优化与JIT编译器
  2. 用神经网络分类陀螺和遥远星体
  3. 启明云端分享| 86盒串口屏烧录说明
  4. Twitter的分布式自增ID算法Snowflake实现分析及其Java、Php和Python版
  5. new调用函数,new具体做了什么?
  6. Java黑皮书课后题第4章:*4.18(学生的专业和年级)编程一个程序,提示用户输入两个字符,显示这两个字符代表的专业以及年级,第一个字符表示专业,第二个是一个数字字符1、2、3、4,输出对应结果
  7. SQL中truncate table和delete的区别 --转
  8. pythonista脚本合集_GitHub - xchenhao/You-are-Pythonista: 汇聚【Python应用】【Python实训】【Python技术分享】等等...
  9. Python字典按值排序、包含字典的列表按字典值排序的方法
  10. Python 各种报错解释及处理方法
  11. OpenCV 2.4.9 +VS2013 开发环境配置
  12. 机器学习算法——神经网络6(SOM网络)
  13. C语言malloc函数的使用!malloc函数的作用:动态内存分配函数,用来向系统请求分配内存空间
  14. nfc卡模式与标准模式_NFC(1)NFC简介,3种模式
  15. python正则表达式匹配数字或者逗号_将数字与正则表达式相匹配-只有数字和逗号...
  16. Oracle初学者入门指南-什么是DSI?
  17. 【约束优先级问题二】动态高度cell
  18. 做一个展示型企业网站要多少钱
  19. Ray----Tune(5):Tune包中的类和函数参考
  20. python中complex(10.99)是什么意思_代码 a = 10.99; print(complex(a)) 的执行结果是 _________ 。...

热门文章

  1. 《算法:C语言实现》——连通性
  2. 开源的人品测试机 (windows版)
  3. linux下mysql设置关联_Linux下mysql安装与配置
  4. 消息中间件Rabbitmq核心概念讲解
  5. java并发编程之thread.join()方法详解
  6. 及时复盘的好处_复盘,组织和个人提升的一种特效工具
  7. 高教杯历年真题_喜报 | 2019“高教社”杯全国大学生数学建模竞赛获奖名单!...
  8. 测试m.2固态的软件,Ryzen新平台下M.2固态硬盘性能测试
  9. 二维均匀分布的边缘密度函数_理解概率密度函数
  10. python绘制两个离散变量关系图——马赛克图