每个月的日期显示

时间:2017-05-17 15:55:44

标签: sql tsql

我有一个不同的类别代码,我需要每个月加入,形成一个结束数据的开始日期。

DECLARE @Start DATE, @End DATE
SET @Start = '20170101'
SET @End = getdate()

SELECT        Category_Cd, CalMonth = (SELECT DATEADD(MONTH,number+1,@Start) [Date]
FROM master..spt_values
WHERE type = 'P'
AND DATEADD(MONTH,number+1,@Start) < @End)
FROM            dbo.Category
WHERE        (Category_Cd LIKE N'0%')

因为没有加入我得到这个: 子查询返回的值超过1。当子查询遵循=,!=,&lt;,&lt; =,&gt;,&gt; =或子查询用作表达式时,不允许这样做。

我不想加入,我只希望每个类别代码都包含从开始到结束的每个数据。谢谢你的帮助。

DECLARE @Start DATE, @End DATE
SET @Start = '20170101'
SET @End = getdate()

SELECT DATEADD(MONTH,number+1,@Start) [Date]
FROM master..spt_values
WHERE type = 'P'
AND DATEADD(MONTH,number+1,@Start) < @End

这段代码确实会像我想要的那样返回每个开始日期。现在我只需要完成每个类别代码。

01001 2017-02-01
01001 2017-03-01
01001 2017-04-01
01001 2017-05-01
01002 2017-02-01
01002 2017-03-01
01002 2017-04-01
01002 2017-05-01
01003 2017-02-01
01003 2017-03-01
01003 2017-04-01
01003 2017-05-01

1 个答案:

答案 0 :(得分:1)

<强> SQL DEMO

DECLARE @Start DATE, @End DATE;
SET @Start = '20170101';
SET @End = getdate();

WITH myMonths as (
    SELECT DATEADD(MONTH,number+1,@Start) [Date]
    FROM master..spt_values
    WHERE type = 'P'
    AND DATEADD(MONTH,number+1,@Start) < @End
)
SELECT *
FROM category
CROSS JOIN myMonths