Sql 将多个日期连接到单个varchar单元格中
我把这个问题改写得更直截了当。我有一个SQL查询:Sql 将多个日期连接到单个varchar单元格中,sql,sql-server,Sql,Sql Server,我把这个问题改写得更直截了当。我有一个SQL查询: SELECT CAST(CASE WHEN DTH.DoubleBookedFlag = 1 THEN DTH.ActivityDate END AS VARCHAR(MAX)) AS DoubleBookedHours FROM DailyTaskHours DTH WHERE DTH.DoubleBookedFlag = 1 结果如下: 我不希望返回多行,而是希望返回的内容是单个VARCHAR字段中的一个长串接字符串,由类似|的字符分隔
SELECT CAST(CASE WHEN DTH.DoubleBookedFlag = 1 THEN DTH.ActivityDate END AS VARCHAR(MAX)) AS DoubleBookedHours
FROM DailyTaskHours DTH
WHERE DTH.DoubleBookedFlag = 1
结果如下:
我不希望返回多行,而是希望返回的内容是单个VARCHAR字段中的一个长串接字符串,由类似|的字符分隔
如何实现这一点?您可以使用类似于以下内容的内容附加到varchar。顺便说一句,代码中的CASE语句是不必要的。double booked标志将始终为1,因为您在WHERE子句中指定了该标志
SELECT DTH.ActivityDate, STUFF(List, 1 ,2, '')
FROM DailyTaskHours DTH
CROSS APPLY ( SELECT ', ' + CAST(DTH.ActivityDate AS NVARCHAR) [text()]
FROM DailyTaskHours
WHERE DTH.ActivityDate = 1
AND SomeRefrencingColum = DTH.SomeRefrencingColum
FOR XML PATH('')
) Q(List)
DECLARE @test varchar(max)
SELECT @test = ''
SELECT @test = @test + '|' + CONVERT(varchar, DTH.ActivityDate, 101) FROM DailyTaskHours DTH
SELECT @test
您可以使用GROUP_CONCAT函数在一个字段中获得结果,如下所示:
SELECT GROUP_CONCAT(
(CASE WHEN DTH.DoubleBookedFlag=1 THEN DTH.ActivityDate END)
SEPARATOR ' | ')
as DailyTaskHours
FROM
DailyTaskHours as DTH
WHERE
DTH.DoubleBookedFlag = 1
此外,下面的查询也将给出相同的结果,不需要CASE来获得输出,因为我们在Where子句中指定了相同的条件
SELECT GROUP_CONCAT(DTH.ActivityDate SEPARATOR ' | ') as DailyTaskHours
FROM
DailyTaskHours as DTH
WHERE
DTH.DoubleBookedFlag = 1
在中演示这两个查询检查此输出仍返回多行。