【问题标题】:for every row get all dates between columns and insert into column对于每一行,获取列之间的所有日期并插入列
【发布时间】:2016-02-11 06:27:43
【问题描述】:

我有一个表格变量,我用特定范围(和 dw、wk、mm、yy、dd 值)之间的所有日期填充

然后我会在开始日期之前将其加入到我的检查记录中。

SELECT     CalDate
           , DayN
           , WeekN
           , YearN
           , DayOfMonthN
           , [Start Date]
           , [End Date]
           , [Inspection Number] 
FROM       @Calendar             AS dateInfo
LEFT JOIN  [Inspection Records]  AS IR 
    ON     IR.[Start Date]       = dateInfo.CalendarDate

这很好用,我现在需要做的是(我必须这样做才能传递给第 3 方应用程序...)是获取 [开始日期] 和 [结束日期] 之间的所有日期并将它们作为逗号分隔列表添加到列中。

我遇到过这个答案t-sql get all dates between 2 dates 这似乎完全符合我的需要。

我被困在如何构建我的脚本以使用该脚本获取我的 [开始日期] 和 [结束日期] 之间的所有日期并将它们添加到列中。

  • 计算两列之间所有日期的最佳方法是什么
  • 如何将结果作为逗号分隔列表插入到单列中

注意:我无法向数据库添加任何内容。

示例:(尝试获取日期列)

  <table>
    <tr>
    <td>CalDate</td>
    <td>DayN</td>
    <td>WeekN</td>
    <td>YearN</td>
    <td>DayOfMonthN</td>
    <td>Start Date</td>
    <td>End Date</td>
    <td>Inspection Number</td>
    <td>Dates</td>
    </tr>
    <tr>
    <td>07-08-2014</td>
    <td>5</td>
    <td>32</td>
    <td>2014</td>
    <td>7</td>
    <td>07-08-2014</td>
    <td>11-08-2014</td>
    <td>A0001</td>
<td>07-08-2014,08-08-2014,09-08-2014,10-08-2014,11-08-2014</td>
    </tr>
    </table>

【问题讨论】:

  • 您能否举例说明您期望的输入和输出?
  • 示例已添加,谢谢

标签: sql sql-server tsql date recursion


【解决方案1】:

这会将您的所有日期放入名为@csv 的变量中。 我相信您将能够根据自己的需要进行修改......

DECLARE @csv nVarchar(max)
SELECT @csv = COALESCE(@csv + ', ', '') + CONVERT(Nvarchar(20), yourDateColumn) 
FROM yourDateTable

【讨论】:

  • 感谢您以 csv 格式向我提供查询返回的所有日期,这些日期可以包含在我的选择语句中(选择 @csv 等)。但我需要根据该行中的 [开始日期] 和 [结束日期] 列每行执行此操作。
【解决方案2】:
SELECT     CalDate
           , DayN
           , WeekN
           , YearN
           , DayOfMonthN
           , [Start Date]
           , [End Date]
           , [Inspection Number]
           , [Dates] = STUFF((
                SELECT     ',' + CONVERT(VARCHAR(10), C.CalDate,105)
                FROM       @Calendar AS C
                WHERE      C.CalDate BETWEEN IR.[Start Date] AND IR.[End Date]
                FOR XML    PATH('')
            ), 1, 1, '')
FROM       @Calendar             AS dateInfo
LEFT JOIN  [Inspection Records]  AS IR 
    ON     IR.[Start Date]       = dateInfo.CalendarDate

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 2021-09-14
    • 2019-04-23
    • 2013-07-07
    相关资源
    最近更新 更多