一:所規(guī)定的每周第一天 1.1 @@DATEFIRST 返回 SET DATEFIRST 參數(shù)的當(dāng)前值,SET DATEFIRST 參數(shù)指明所規(guī)定的每周第一天:1 對應(yīng)星期一,2 對應(yīng)星期二,依次類推,用 7 對應(yīng)星期日。美國英語中默認(rèn) 7 對應(yīng)星期日。 1.2 查詢當(dāng)前系統(tǒng)所規(guī)定的每周第一天 SELECT @@DATEFIRST AS '1st Day' 1.3 設(shè)置當(dāng)前系統(tǒng)所規(guī)定的每周第一天(例子為設(shè)置星期日為每周第一天) SET DATEFIRST 7 二:計算兩個日期之間的小時、天、周、月、年等時間間隔總數(shù)。 2.1 DATEDIFF 返回跨兩個指定日期的日期和時間邊界數(shù)。 2.2 語法 DATEDIFF ( datepart , startdate , enddate ) 2.3 參考 下表列出了 Microsoft? SQL Server? 識別的日期部分和縮寫。 日期部分 縮寫 year yy, yyyy quarter qq, q Month mm, m dayofyear dy, y Day dd, d Week wk, ww Hour hh minute mi, n second ss, s millisecond ms 三:計算一個日期通過給時間間隔加減來獲得一個新的日期。 3.1 DATEADD 在向指定日期加上一段時間的基礎(chǔ)上,返回新的 datetime 值。 3.2 語法 DATEADD ( datepart , number, date ) 3.3 參考 下表列出了 Microsoft? SQL Server? 識別的日期部分和縮寫。 日期部分 縮寫 year yy, yyyy quarter qq, q Month mm, m dayofyear dy, y Day dd, d Week wk, ww Hour hh minute mi, n second ss, s millisecond ms 四:時期和時間變量和毫秒一樣是從“1900-01-01 00:00:00.000”開始計算的 五:在Sql Server中時間是精確到3毫秒 六:好用的例子 6.1計算一個月第一天的SQL 腳本:SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 6.2一年的第一天的SQL 腳本:SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) 6.3本周的星期一的SQL 腳本: SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) 6.4 季度的第一天的SQL 腳本:SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) 6.5當(dāng)天的半夜的SQL 腳本:SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0) 6.6上個月的最后一天的SQL 腳本:SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) 6.7去年的最后一天的SQL 腳本:SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) 6.8本月的最后一天的SQL 腳本: SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) 6.9 本年的最后一天的SQL 腳本: SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0)) 6.10本月的第一個星期一的SQL 腳本:select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0) 七:其他日期處理方法 1)去掉時分秒 declare @ datetime set @ = getdate() --'2003-7-1 10:00:00' SELECT @,DATEADD(day, DATEDIFF(day,0,@), 0) 2)顯示星期幾 select datename(weekday,getdate()) 3)如何取得某個月的天數(shù) declare @m int set @m=2 --月份 select datediff(day,'2003-'+cast(@m as varchar)+'-15' ,'2003-'+cast(@m+1 as varchar)+'-15') 另外,取得本月天數(shù) 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') 或者使用計算本月的最后一天的腳本,然后用DAY函數(shù)區(qū)最后一天 SELECT Day(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))) 4)判斷是否閏年: 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 5)一個季度多少天 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)) |
|