码迷,mamicode.com
首页 > 数据库 > 详细

SQL 将一条记录中多个字段的值拼接为一个字段 && 将多行数据合并成一行,并且拼接CONVERT() 、for xml path的使用

时间:2018-08-30 23:36:39      阅读:367      评论:0      收藏:0      [点我收藏+]

标签:image   利用   for   arch   类型   bubuko   color   分享   data   

接着上篇文章的订单表(商品编号,价格设置时间id(类似于创建时间,创建时间约早,则act_id越小) ,价格的时间段,商品价格)

一、将一条记录中多个字段的值拼接为一个字段

技术分享图片

现要求将两个时间段合并为一个字段,应该如何做呢?

先来看下理想的结果:

技术分享图片

查询出的时间段合并到一起了:

代码如下,将查询的字段用+‘你想要的符号’ + 拼接即可

select item,act_id,loc_id,convert(varchar(100),start_date,20)+ - +convert(varchar(100),end_date,20) as range_date from test1

查询过程中有可能需要进行字段类型的转化:

这里顺便说下对时间类型的转化:

使用的是CONVERT ( data_type [ ( length ) ] , expression [ , style ] ),查询的语句及结果如下:

Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06
Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16
Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06
Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06
Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06
Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46
Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06
Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16
Select CONVERT(varchar(100), GETDATE(), 12): 060516
Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
Select CONVERT(varchar(100), GETDATE(), 112): 20060516
Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700
Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827
Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM
Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM

二、将多行数据合并成一行,并且拼接

将上面的结果插入到临时表中#temp01

技术分享图片

在这个表中 一个item 有多条不同的记录,现在需要将同一商品的不同信息合并到一条数据上,又是如何实现呢 

还是先看下理想的结果:

 技术分享图片

可以看到同一item的信息合并在一条记录上了(省去了时间字段)

来看下代码是如何实现的:

select item,
(select char(10) + act_id from #temp01 a where a.item = b.item  for xml path(‘‘)) act_id,
(select char(10) + loc_id from #temp01 a where a.item = b.item  for xml path(‘‘)) act_id  
from #temp01 b group by item

这里利用的是 for xml path 就是将查询结果集以XML形式展现 这里的char(10)代表的是以空格隔开每一个字段 也可以将char(10)替换为其他字符,比如‘#’ 则以#分割

另外我们看下不加char(10)则会会显示的默认xml形式:

技术分享图片

 

SQL 将一条记录中多个字段的值拼接为一个字段 && 将多行数据合并成一行,并且拼接CONVERT() 、for xml path的使用

标签:image   利用   for   arch   类型   bubuko   color   分享   data   

原文地址:https://www.cnblogs.com/ygtup/p/9561783.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!