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

接着上篇文章的订单表(商品编号,价格设置时间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形式:

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

时间: 2024-12-22 07:30:47

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

SQL SERVER将多行数据合并成一行(转)

1)比如表中有三列数据: 2)执行如下查询: 1 SELECT [USER_NAME], [USER_ACCOUNT] 2 , [ROLE_NAME] = stuff(( 3 SELECT ',' + [ROLE_NAME] 4 FROM [WAP_WORKSHEET].[dbo].[userTest] 5 WHERE [USER_ACCOUNT] = a.[USER_ACCOUNT] 6 FOR XML path('') 7 ), 1, 1, '') 8 FROM [WAP_WORKSHEET

SQLServer 中多行数据合并成一行数据(一个字段)

需求:有四行数据,如下: 1.苹果 2.橘子 3.桃子 4.波罗 合并成一个字段:苹果,橘子,桃子,波罗: 需求明确之后,先弄点测试数据,上代码: --创建一个临时表 Create table #temp ( testName varchar(20) ) --写入测试数据 INSERT INTO #temp(testName) values('苹果'); INSERT INTO #temp(testName) values('橘子'); INSERT INTO #temp(testName) v

sql查询 ,多行数据合并成一行,并且显示合并后某一列的值拼接结果

select  [value] = stuff((select ','+modmb003  from modmb detail where modmb=18 for xml path('')), 1, 1, '') 其中stuff的作用是:删除指定长度的字符,并在指定的起点处插入另一组字符 语法:STUFF ( character_expression , start , length ,character_expression ) 列:SELECT STUFF('abcdef', 2, 3,

sql里将重复行数据合并为一行,数据用逗号分隔

DECLARE @T1 table ( UserID int , UserName nvarchar(50), CityName nvarchar(50) ); insert into @T1 (UserID,UserName,CityName) values (1,'a','上海') insert into @T1 (UserID,UserName,CityName) values (2,'b','北京') insert into @T1 (UserID,UserName,CityName)

T SQL 将一列多行数据合并为一行

SQL Server 在进行数据迁移和报表处理的时候遇到将一列多行数据拼接为一个字符串的情形,查找相关的资料整理如下,提供两种方法. Table:SC Student Course 张三 大学语文 李四 大学语文 张三 书法鉴赏 张三 音乐欣赏 李四 电影赏析 期望得到的结果: Student Course 张三 大学语文,书法鉴赏,音乐欣赏 李四 大学语文,电影赏析 一.用户自定义函数 CREATE FUNCTION FN_Merge (@Student NVARCHAR(50)) RETUR

使用PL/SQL删除百万条记录的大表

使用PL/SQL删除百万条记录的大表: 最近开发人员对测试环境数据库进行了压力测试,数据库中产生了大量的脏数据.有几张大表里数据量均在百万甚至千万条的记录数.开发人员现提出需求如下: 只清理其中的部分脏数据,不允许对这些表使用truncate操作.于是就有了下面的PL/SQL清理脚本: 1.编写删除数据表数据的脚本内容如下: $ cat data_del.sql set serveroutput onshow serveroutputDECLARE V_LOGNUM NUMBER;V_NEEDA

mongo数据库中一条记录中某个属性是数组情形时 数据结构的定义

package entity; import java.util.Date; import com.mongodb.BasicDBList;import com.mongodb.DBObject; public class CommonEditEntity { /** 数据库中查询记录结果 */ private DBObject record; /** 数据库默认id */ private String _id; /** 项目id */ private String project_id; /*

TSQL--按某字段列分组,在将各组中某列合并成一行

鉴于群里很多同事在问这个问题,我简单写个Demo,希望对初学者有帮助! 无真相,无解说,不解释,直接上Code! --================================================== --示例代码,仅供参考 --按照object_id分组,将同一组的name列的值合并在一起 SELECT OBJECT_NAME(T1.object_id) AS ObjectName , ( SELECT T2.name + ',' FROM sys.all_columns T

违反并发性: UpdateCommand影响了预期 1 条记录中的 0

今天遇到这个错误,看到下面这种说法都没解决问题: 1 检查是否设有主键.2 DeleteCommand的问题:检查是否含有自动编号字段(Access的自动编号字段可能会引发此异常):  UpdateCommand的问题:检查更新的字段的原始值是否为空值(原始空值更新时可能会引发此异常) 3.多人并行操作也可能引发这样的异常. 最后发现是我使用强类型Dataset时,后面修改了数据库添加了字段,也在对应DataTable中添加了字段,但是GetDataXXX时对应的sql代码的select中没有该