2017-04-19 92 views
-1

,并提前致谢。我远离SQL开发人员,但有一些经验,我觉得这应该是相当简单的。获取剩余天数并附加到选择语句

我发现下面的查询,返回该月的剩余天数。它像一个魅力。但是当我尝试将它附加到一个简单的选择语句从表中获取数据时,我无法将其作为列追加。任何帮助将非常感激。

Declare @DaysLeft as INT 

;With MyCTE AS 
(
    SELECT number + 1 as 'CurrentDay' 
    FROM master..spt_values 
    WHERE type='p' 
    AND number < datepart(dd, DateAdd(day,-1,DateAdd(Month,1,DateAdd(Month, 
      DateDiff(Month, 0, GETDATE()),0)))) 
AND datename(WEEKDAY,DateAdd(Month, DateDiff(Month, 0, GETDATE()), 
            number)) not in ('Saturday','Sunday') 
) 

Select @DaysLeft = (Select COUNT(*) As MyTotal from MyCTE 
WHERE CurrentDay >= DATEPART(DD, GETDATE())) 

Select @DaysLeft as 'Remaining' 

什么,我试图:

Select column 1, column 2 , Remaining (code from above) from TableName 
+3

不完全知道你正试图在这里做,但尝试将最后一行'选择第1列,第2列,@DaysLeft从TableName'“剩余”? – aucuparia

回答

0

我认为这是一个简单的方法来获得当月剩余天数:

with remainingDays as (
     select dateadd(day, 1, currdate) as dte 
     from (select cast(getdate() as date) currdate) x 
     where month(dateadd(day, 1, currdate)) = month(getdate()) 
     union all 
     select dateadd(day, 1, dte) as dte 
     from remainingDays 
     where month(dateadd(day, 1, dte)) = month(getdate()) 
    ) 
select * 
from remainingDays; 

它使用递归CTE,但有对于这种类型的操作不应该有那么多的开销。

Here它在雷克斯测试仪。

+0

如何用下面的答案切换?我无法让它运行 – Adam

0

谢谢你的工作。非常感激。这里是我的最终查询:

Declare @DaysLeft as INT 
;With MyCTE AS 
(
    SELECT number + 1 as 'CurrentDay' 
FROM master..spt_values 
WHERE type='p' 
AND number < datepart(dd, DateAdd(day,-1,DateAdd(Month,1,DateAdd(Month, 
             DateDiff(Month, 0, GETDATE()),0)))) 
AND datename(WEEKDAY,DateAdd(Month, DateDiff(Month, 0, GETDATE()), 
            number)) not in  ('Saturday','Sunday') 
) 

Select @DaysLeft = (Select COUNT(*) As MyTotal from MyCTE 
WHERE CurrentDay >= DATEPART(DD, GETDATE())) 


SELECT column 1, column 2, @daysLeft 'remaining' 
FROM TableName