找不到指定日期当前月份的剩余天数

时间:2016-07-12 13:12:04

标签: sql sql-server sql-server-2008

我只想计算从给定日期起剩余的天数

例如:

如果日期是< 02/01/2016'那么给定月份的剩余天数是' 28'

如果03/05/2016然后' 25'天...

我尝试了下面的

SELECT DATEPART(DD,'03/05/2016')  it given me only 5 days

9 个答案:

答案 0 :(得分:3)

SQLServer特定,因为您也提到了版本:

 select DATEDIFF(day,getdate(),DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)))

你只需要找到给定月份的最后日期,并且计算datediff很容易,下面的表达式也是一样的

  DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))

2012年,它更容易:

select datediff(day,getdate(),EOMONTH(GETDATE()))

答案 1 :(得分:1)

用于SQL Server

select DATEDIFF(DAY, 
                GETDATE(), 
                DATEADD(MONTH, 
                        DATEDIFF(MONTH, 0, GETDATE()) + 1, 
                        0)
               ) - 1

答案 2 :(得分:0)

由于您还标记了Oracle:

SELECT LAST_DAY( DATE '2016-02-01' ) - DATE '2016-02-01'
         AS days_remaining
FROM   DUAL;

<强>输出

DAYS_REMAINING
--------------
            28

答案 3 :(得分:0)

检查下面,

DECLARE @date DATETIME = '02/05/2016'
SELECT CASE WHEN month(@date) IN (1,3,5,7,8,10,12) THEN 31 - DATEPART(DD,@date)
            WHEN month(@date) IN (4,6,9,11) THEN 30 - DATEPART(DD,@date)
            ELSE 28 - DATEPART(DD,@date)
            END

注意:在上面的代码中,闰年不予考虑

编辑:闰年证明版

DECLARE @date DATETIME = '02/05/2016'
DECLARE @leap_year bit = 0

IF ((YEAR(@date) % 4 = 0 AND YEAR(@date) % 100 <> 0) OR YEAR(@date) % 400 = 0)
   SET @leap_year = 1

SELECT CASE WHEN MONTH(@date) IN (1,3,5,7,8,10,12) THEN 31 - DATEPART(DD,@date)
        WHEN MONTH(@date) IN (4,6,9,11) THEN 30 - DATEPART(DD,@date)
        WHEN MONTH(@date) = 2 AND @leap_year = 1 then 29 - DATEPART(DD,@date)
        ELSE 28 - DATEPART(DD,@date)
        END

答案 4 :(得分:0)

这应该做的伎俩。希望能帮助到你。我的假设是您使用的是SQL Server 2008。 这里的诀窍是获得下个月的第一天,这将永远是01-NextMonth-Year

  

DATEADD(mm,1,@ Date)

并从中减去1天以获得当月的最后一天

  

DATEADD(dd, - 1,CONVERT(VARCHAR(8),DATEADD(mm,1,@ Date),121)+   &#39; 01&#39)

现在,输入日期与输入月份的最后一天之间的DateDiff将为您提供该月的剩余天数

  

DATEDIFF(dd,@ Date,@ LastDateofMonth)

DECLARE @Date DATE = GETDATE()
DECLARE @LastDateofMonth DATE

SELECT @LastDateofMonth = DATEADD(dd, - 1, CONVERT(VARCHAR(8), DATEADD(mm, 1, @Date), 121) + '01')

SELECT DATEDIFF(dd, @Date, @LastDateofMonth)

答案 5 :(得分:0)

DECLARE @MyDATE as datetime;


SELECT @MYDATE = '19960423';

--wind back to first of month
--add on one month
--now calculate days from original date, this is always '1 to high' so subtract 1

SELECT 
   DATEDIFF(day, @mydate, DATEADD(month, 1,D ATEADD(day, 1 - DAY(@MYDATE), @MYDATE))) - 1;

答案 6 :(得分:0)

你可以用这个来计算今天的差异

SELECT DATEDIFF(day,getdate() ,EOMONTH(GETDATE()))

或者这个从param计算日期

SELECT DATEDIFF(day,@date ,EOMONTH(GETDATE()))

答案 7 :(得分:0)

使用SQL 2012的新功能EOMONTH(),您可以尝试:

DECLARE @Date date = '2017-08-08'
select datediff (dd, @Date, EOMONTH(@Date)) as DaysRemaining

答案 8 :(得分:-1)

select DATEDIFF(DD, GETDATE(),GETDATE())
select DATEDIFF(DD,'2015/10/05','2015/10/07')