如何检查输入日期的 DAY 是否是 SQL 中给定月份的最后一天?
How do I check whether the input date's DAY is the last day of the given month in SQL?
DECLARE @Date DATE = '2/28/2014'
我需要测试上面 DATE 中的 DAY 是否是该月的最后一天,它应该适用于一年中的所有月份。
如果是真的,那么我需要return一个真,如果不是,那么就是假的。
例如
SET @Date = '2/27/2014'
这应该 return FALSE。
SET @Date = '12/31/2014'
这应该 return 正确。
我知道您可以根据月份进行操作,但我只是想知道是否有一种简单的方法可以做到这一点。
几乎适用于任何版本的 SQL 服务器的简单方法是:
select (case when month(@date) <> month(dateadd(day, 1, @date))
then 'true' else 'false'
end)
也就是加一天,看看是不是同月。这适用于闰年和 12 月 31 日等。
这将 return 如果是该月的最后一天,则为 1,否则为 0
DATEDIFF(month,@date,@date+1)
因为还没有人给出 2012+ 答案作为答案...
SELECT IIF(EOMONTH(@date) = @date, 'Yes','No')
另外,您应该为日期文字使用明确的格式,例如 ISO yyyy-mm-dd
,以避免在使用不同默认选项的登录下执行代码时出现意外。
DECLARE @Date DATE = '2/28/2014'
我需要测试上面 DATE 中的 DAY 是否是该月的最后一天,它应该适用于一年中的所有月份。
如果是真的,那么我需要return一个真,如果不是,那么就是假的。
例如
SET @Date = '2/27/2014'
这应该 return FALSE。
SET @Date = '12/31/2014'
这应该 return 正确。
我知道您可以根据月份进行操作,但我只是想知道是否有一种简单的方法可以做到这一点。
几乎适用于任何版本的 SQL 服务器的简单方法是:
select (case when month(@date) <> month(dateadd(day, 1, @date))
then 'true' else 'false'
end)
也就是加一天,看看是不是同月。这适用于闰年和 12 月 31 日等。
这将 return 如果是该月的最后一天,则为 1,否则为 0
DATEDIFF(month,@date,@date+1)
因为还没有人给出 2012+ 答案作为答案...
SELECT IIF(EOMONTH(@date) = @date, 'Yes','No')
另外,您应该为日期文字使用明确的格式,例如 ISO yyyy-mm-dd
,以避免在使用不同默认选项的登录下执行代码时出现意外。