天天看點

sql server 怎麼計算年份,SQL Server各種日期計算方法

1.上個月的最後一天  

                 這是一個計算上個月最後一天的例子。它通過從一個月的最後一天這個例子上減去3毫秒來獲得。有一點要記住,在Sql Server中時間是精确到3毫秒。這就是為什麼我需要減去3毫秒來獲得我要的日期和時間。   

 SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))   計算出來的日期的時間部分包含了一個Sql Server可以記錄的一天的最後時刻(“23:59:59:997”)的時間。 

 2.去年的最後一天 

     連接配接上面的例子,為了要得到去年的最後一天,你需要在今年的第一天上減去3毫秒。

  

  SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))

  

  3.本月的最後一天

  

  現在,為了獲得本月的最後一天,我需要稍微修改一下獲得上個月的最後一天的語句。修改需要給用DATEDIFF比較目前日期和“1900-01-01”傳回的時間間隔上加1。通過加1個月,我計算出下個月的第一天,然後減去3毫秒,這樣就計算出了這個月的最後一天。這是計算本月最後一天的SQL腳本。

  

  SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))

  

 

 4.本年的最後一天

  

  你現在應該掌握這個的做法,這是計算本年最後一天腳本

  

  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)

  

  在這個例子裡,我使用了“本周的星期一”的腳本,并作了一點點修改。修改的部分是把原來腳本中“getdate()”部分替換成計算本月的第6天,在計算中用本月的第6天來替換目前日期使得計算可以獲得這個月的第一個星期一。

  

  總結

  

  我希望這些例子可以在你用DATEADD和DATEDIFF函數計算日期時給你一點啟發。通過使用這個計算日期的時間間隔的數學方法,我發現為了顯示兩個日期之間間隔的有用曆法是有價值的。注意,這隻是計算出這些日期的一種方法。要牢記,還有很多方法可以得到相同的計算結果。假如你有其他的方法,那很不錯,要是你沒有,我希望這些例子可以給你一些啟發,當你要用DATEADD和DATEDIFF函數計算你程式可能要用到的日期時。

  附錄:其他日期處理方法

  

  1)去掉時分秒

declare @ datetime

  set @ = getdate() --'2003-7-1 10:00:00'

  SELECT @,DATEADD(day, DATEDIFF(day,0,@), 0)

 

  2)顯示星期幾

     select datename(weekday,getdate())

  3)如何取得某個月的天數

  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')

  或者使用計算本月的最後一天的腳本,然後用DAY函數區最後一天

  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))