sqlserver 日期函數
07-29
使用DATEDIFF和DATEADD函數來計算日期,和本來從當前日期轉換到你需要的日期的考慮方法有點不同。必須從時間間隔這個方面來考慮。DATEDIFF函數計算兩個日期之間的小時、天、周、月、年等時間間隔總數。 DATEADD函數計算一個日期通過給時間間隔加減來獲得一個新的日期。 實例: 一個月的第一天 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 最核心的函數是getdate(),下一個執行的函數DATEDIFF(mm,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"。 本周的星期一 SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) 一年的第一天 SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) 季度的第一天 SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) 半夜的時間點 SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0) 上個月的最後一天 通過從一個月的最後一天這個例子上減去3毫秒來獲得。在Sql Server中時間是精確到3毫秒。這是為什麼需要減去3毫秒來獲得需要的日期和時間。 SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) 計算出來的日期的時間部分包含了一個Sql Server可以記錄的一天的最後時刻("23:59:59:997")的時間。 去年的最後一天 接上面的例子,需要在今年的第一天上減去3毫秒。 SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) 本月的最後一天 SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) 本年的最後一天 SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。 本月的第一個星期一 select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate()) ), 0) 計算中用本月的第6天來替換當前日期使得計算可以獲得這個月的第一個星期一。 去掉時分秒 declare @ datetime set @ = getdate() --2003-7-1 10:00:00 SELECT @,DATEADD(day, DATEDIFF(day,0,@), 0) 顯示星期幾 select datename(weekday,getdate()) 如何取得某個月的天數 declare @m int set @m=2 --月份 select datediff(day,2003-+cast(@m as varchar)+-15 ,2003-+cast(@m+1 as varchar)+-15) 取得本月天數 select datediff(day,cast(month(GetDate()) as varchar)+-+cast(month(GetDate()) as varchar)+-15 ,cast(month(GetDate()) as varchar)+-+cast(month(GetDate())+1 as varchar)+-15) SELECT Day(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))) 判斷是否閏年 SELECT case day(dateadd(mm, 2, dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)))) when 28 then 平年 else 閏年 end select case datediff(day,datename(year,getdate())+-02-01,dateadd(mm,1,datename(year,getdate())+-02-01)) when 28 then 平年 else 閏年 end 一個季度多少天 declare @m tinyint,@time smalldatetime select @m=month(getdate()) select @m=case when @m between 1 and 3 then 1 when @m between 4 and 6 then 4 when @m between 7 and 9 then 7 else 10 end select @time=datename(year,getdate())+-+convert(varchar(10),@m)+-01 select datediff(day,@time,dateadd(mm,3,@time))
推薦閱讀:
推薦閱讀:
※歷年中秋節陽曆日期(1949-2049年)
※陰曆出生日期看一輩子財運-今日頭條
※WORKDAY 函數 (時間日期函數)
※開車應該牢記這三個日期,避免麻煩重重
※日本宣布放還非法抓扣的中國船長 具體日期未定 ——中新網
