我只想计算从给定日期起剩余的天数
例如:
如果日期是< 02/01/2016'那么给定月份的剩余天数是' 28'
如果03/05/2016然后' 25'天...
我尝试了下面的
SELECT DATEPART(DD,'03/05/2016') it given me only 5 days
答案 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')