SQL Server,水平连接日期范围

时间:2016-04-06 17:24:37

标签: sql date concatenation

我想知道我可以在水平计算列中的两个日期之间连接的方式,例如:

date_ini,date_end,result
2016-04-01,2016-04-05,2016-04-01|2016-04-02|2016-04-03|2016-04-04|2016-04-05
2016-04-03,2016-04-06,2016-04-03|2016-04-04|2016-04-05|2016-04-06
2016-04-05,2016-04-05,2016-04-05
2016-04-05,2016-04-06,2016-04-05|2016-04-06

结果是我要创建的专栏

谢谢,

1 个答案:

答案 0 :(得分:0)

这样的功能可以解决问题。请更改返回varchar的大小以满足您的需求。

CREATE FUNCTION dbo.date_concatenate(@start_date DATETIME, @end_date DATETIME)
RETURNS VARCHAR(255)
AS
BEGIN
  DECLARE @result VARCHAR(255);
  SET @result = '';
  IF(@end_date < @start_date)
    SET @result = 'Error: End Date can not be less than start date';
  ELSE
    BEGIN
      WHILE (@start_date < @end_date)
        BEGIN
          SET @result = @result + CONVERT(varchar(10),@start_date,120) + '|'
          SET @start_date = DATEADD(dd,1,@start_date)
        END
    END
  SET @result = @result + CONVERT(varchar(10),@end_date,120)
  RETURN @result
END