Sqlserver 根据年月获取第一天和最后一天
sqlserver获取当月、年的第一天和最后一天
-- 当月第一天
select dateadd(month, datediff(month, 0, getdate()), 0)
-- 当月最后一天(思路:下月的第一天减去一天)
select dateadd(month, datediff(month, 0, dateadd(month, 1, getdate())), -1)
-- 当年第一天
select dateadd(year, datediff(year, 0, getdate()), 0)
-- 当年最后一天(思路:下年的第一天减去一天)
select dateadd(year, datediff(year, 0, dateadd(year, 1, getdate())), -1)
-- 当天零时2018-10-15 00:00:00.000
select dateadd(day, datediff(day, 0, getdate()), 0)
例子
declare @year int=2022
declare @month int=4
declare @begindate datetime= convert(varchar(30),cast(@year as varchar)+'-'+(case when @month < 10 then '0'+cast(@month as varchar) else cast(@month as varchar) end) + '-' +'01',120)
declare @enddate datetime=dateadd(month, datediff(month, -1, @begindate), -1)
print @begindate
print @enddate
函数datediff(month, 0, getdate())是计算当前日期和“1900-01-01 00:00:00.000”这个日期之间的月数。
记住:日期和时间变量和毫秒一样是从“1900-01-01 00:00:00.000”开始计算的。这就是为什么你可以在
DATEDIFF函数中指定第一个时间表达式为“0”。
下一个函数是DATEADD,增加当前日期到“1900-01-01”的月数。通过增加预定义的日期“1900-01-01”和当前
日期的月数,我们可以获得这个月的第一天。另外,计算出来的日期的时间部分将会是“00:00:00.000”。
这个计算的技巧是先计算当前日期到“1900-01-01”的时间间隔数,然后把它加到“1900-01-01”上来获得特
殊的日期,这个技巧可以用来计算很多不同的日期。
分类:
SQL Server
标签:
年月日
, datetime计算
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?