SQL server如何获取给定月的倒数数第二天

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL server如何获取给定月的倒数数第二天相关的知识,希望对你有一定的参考价值。

假设给的是3月,那查询出来的结果是3月30号,如果是4月,那查询出来的是4月29号,请问SQL语句怎么写

--获取当前月的倒数第二天
SELECT DATEADD(DD,-DAY(DATEADD(M,1,GETDATE()))-1,DATEADD(M,1,GETDATE())) 
--这个算法其实就是利用DATEADD函数获取指定日期在指定月的第n天,然后添加一个月时间到下个月的第n天,然后倒退n天获取指定月的最后一天,再减1就是倒数第二天
--你可以将其中GETDATE()换成你的指定日期

参考技术A --给定任意一个日期
Declare @d datetime='2015-04-03'
Select Dateadd(DAY,-DAY(@D)-1, Dateadd(Month,1,@d))

参考技术B

取本月的第1天:用字符串组装


再加上1个月:DateAdd(m, 1, @date)

再减去2天:DateAdd(d, -2, @date)

--------------------

DECLARE @m int
    ,@date DateTime
SET @m = 3
SET @date = CAST('2015-' + CAST(@m AS VarChar(2)) + '-01' AS DateTime)
SET @date = DateAdd(d, -2, 
    DateAdd(m, 1, @date)
    )
SELECT @date

sql server获取当前月的天数

方法1

SELECT 32-DAY(getdate()+32-DAY(getdate()))


 

方法2

CREATE FUNCTION dbo.fn_getMonthDayAll ---自定义函数名称
(
@yyyyMM VARCHAR(20) ---指定输入参数格式 4位年份2位月份
)
RETURNS INT ---函数返回值类型
AS
BEGIN
DECLARE @dayAll INT
DECLARE @monthStartDay DATETIME
SET @monthStartDay =LEFT(@yyyyMM,4)+-+RIGHT(@yyyyMM,2)+-01
SELECT @dayAll= DATEDIFF(DAY,@monthStartDay,DATEADD(MONTH,1,@monthStartDay)) ---获取指定月份总天数
RETURN @dayAll;
END
GO

SELECT dbo.Fun_GetMonthDays(201804),
dbo.Fun_GetMonthDays(201808);
---测试获取月份总天数函数

 

以上是关于SQL server如何获取给定月的倒数数第二天的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 中查找给定 12 个月内 6 个月的最高连续期间

如何在 sql server 中获取最近 3 个月的名称

如何在sql中从给定的月份和年份获取月份的第一天和最后一天

sql server获取当前月的天数

获取每个月的第一个日期 SQL Server 2008 R2

在 SQL Server 中,如何为给定表生成 CREATE TABLE 语句?