【问题标题】:SQL Server, horizontal concatenate Range of DatesSQL Server,水平连接日期范围
【发布时间】:2016-04-06 17:24:37
【问题描述】:

我想知道如何在计算列中水平连接两个日期,例如:

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

结果是我要创建的列

谢谢,

【问题讨论】:

  • 请提供您的源数据和预期输出(以清晰的格式)。表结构通常也很有帮助。 stackoverflow.com/help/how-to-ask
  • 所有这些日期都应该是您想要的输出,还是格式不正确的示例数据?
  • 创建分隔列表通常是客户端的任务。
  • 嗨,源数据只有这两个日期的 date_ini 和 date_end 列,我想得到包含 date_ini 和 date_end 之间日期列表的结果列

标签: sql date concatenation


【解决方案1】:

这样的函数可以解决问题。请更改返回 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

【讨论】:

  • 它不起作用,因为:无法为局部变量分配默认值
  • 您是否创建了该函数,然后使用合法参数调用它。试试这个:使用 {database_name}; SELECT dbo.date_concatenate('2016-04-01', '2016-04-05') 我正是这样做的,得到了​​这个:2016-04-01|2016-04-02|2016-04-03|2016-04 -04|2016-04-05
  • 我忘了说我是 sql server 2005
  • 更新了上面的函数代码,请立即运行。应该管用。创建函数后,尝试像我在上述评论中所做的那样调用它。
  • 'CONCAT' 不是可识别的内置函数名称列、参数或变量 #1:找不到数据类型 DATE。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多