2016-11-16 141 views
2

給定月份剩餘天數 如何查找當月剩餘的天數? 如果當前月份是11月和今天的日期是2016年11月16日 月的天數 - 經過天數=?我想這樣做動態 在我的例子30 - 16 = 14當月剩餘天數

declare @date date 
set @date='16 Nov 2016' 
select datediff(day, @date, dateadd(month, 1, @date)) - 16 AS DaysLeft 

回答

1

只需使用日期部分功能:

declare @date date 
set @date='16 Nov 2016' 
select datediff(day, @date, dateadd(month, 1, @date)) - Datepart(DAY,@date) 
1

更改日期GETDATE()

 declare @date date 
    set @date=GETDATE() 
    select datediff(day, @date, dateadd(month, 1, @date)) - DATENAME(DAY,GETDATE()) 
AS DaysLeft 
1
DECLARE @date DATE SET @date='16 Nov 2016' SELECT DATEDIFF(DAY, @date,EOMONTH(@date)) 
+0

,這是一個2012的功能,我相信 – Tanner

1

使用EOMONTHDATEDIFF功能

declare @date date 
    set @date='16 Nov 2016' 
    select datediff(day,@date,eomonth(@date)) as days_left 

使用下面的解決方案對於以下版本的sql server 2012

DECLARE @DATE DATE 
    SET @DATE='16 NOV 2016' 
    SELECT DATEDIFF(DAY,@DATE,DATEADD(MM,DATEDIFF(MM,0,@DATE)+1,0))-1 AS DAYS_LEFT 
+0

這是一個2012的功能,我相信 – Tanner

+0

是的,這是我的疏忽。現在我更新了帖子 – Buddi

2
--For SQL 2012 And Above Version Use Below Query to Get Count Of Days Left In A Month 

DECLARE @date DATE 
SET @date=GETDATE() 
SELECT DATEDIFF(DAY, @date,EOMONTH(@date)) 

-- And for Sql Server 2008 Use Below Query to Get Count of Days Left for the Month 
    DECLARE @date Date 
     SET @date=GETDATE() 
     SELECT DATEDIFF(DAY, @date, DATEADD(MONTH, 1, @date)) - DATENAME(DAY,GETDATE()) 
    AS DaysLeft 
+1

這是2012年的一個功能,我相信 – Tanner

+0

是的這是一個2012年和以上的SQL Server版本功能 –

+1

問題標籤2008 – Tanner

6

由於這是SQL Server 2008中,你不能使用EOMONTH(這是在2012年版本中引入)。
你必須做一些日期添加和日期進行比較:

SELECT DATEDIFF(DAY, 
       GETDATE(), 
       DATEADD(MONTH, 
         1, 
         DATEADD(DAY, 1 - DAY(GETDATE()), GETDATE()) 
         ) 
       ) - 1 

解釋:
DATEADD(DAY, 1 - DAY(GETDATE()), GETDATE())獲得當月的第一天,包裹DATEADD增加了1個月,包裝DATEDIFF返回的天數在當前日期和下個月的第一個日期之間。這就是爲什麼你需要設置1來獲得正確的天數。

+0

非常感謝,它完美地工作 – JonWay

+0

[很高興幫助: - )](http://meta.stackoverflow.com/questions/291325/how-to-show-appreciation-到一個用戶-ON-計算器/ 291327#291327) –