将多个日期连接到单个varchar单元格中

时间:2013-11-25 21:01:33

标签: 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

结果如下:

enter image description here

我不希望返回多行,而是希望返回的内容是单个VARCHAR字段中的一个长连接字符串,而不是像|。

这样的字符。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:0)

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)

答案 1 :(得分:0)

您可以使用类似于以下内容的方式附加到varchar。顺便说一下,代码中的CASE语句是不必要的。双重预订标志将始终为1,因为您在WHERE子句中指定了该标志。

DECLARE @test varchar(max) 
SELECT @test = ''

SELECT @test = @test + '|' + CONVERT(varchar, DTH.ActivityDate, 101)  FROM DailyTaskHours DTH

SELECT @test

答案 2 :(得分:0)

您可以使用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

此外,下面的查询也会给出相同的结果,因为我们在Where子句中指定了相同的条件,所以不需要CASE来获取输出

SELECT GROUP_CONCAT(DTH.ActivityDate SEPARATOR ' | ') as DailyTaskHours
FROM 
DailyTaskHours as DTH
WHERE 
DTH.DoubleBookedFlag = 1

http://sqlfiddle.com/#!2/19651/23

的两个查询的演示