SQL計算月底日期

其實不難,以下列出分解動作:


--使用dateadd設定為現在日期的1個月後
select dateadd(month,1,getdate()) "1個月後是"
go

--以字串char(7)來取得年與月,2010/01
--並在尾端加上'/1',使字串成為2010/01/1
select convert(char(7),dateadd(month,1,getdate()),111)+'/1' "下個月1日的日期"
go

--將字串轉換為日期格式
select convert(datetime,(convert(char(7),dateadd(month,1,getdate()),111)+'/1')) "日期格式"

--下個月初減一日,就是這個月底
select DATEADD(day, -1, convert(datetime,(convert(char(7),dateadd(month,1,getdate()),111)+'/1'))) "月底日期" 


一步一步加上去,千萬不要心急。
另外以前在寫網頁有種需求,需要取得伺服器上的時間來進行一些工作,因為一般使用Javascript或ASP取得的是Client電腦的時間,所以還必須大費周章。


select CONVERT(char,getdate(),111) "日期", CONVERT(char,GETDATE(),120) "日期時間" 



其實只要使用SQL語法去取得Server的時間,然後轉換成字串,然後讓ASP去取得SQL丟出的時間就可以了。就不用怕Client修改本機時間,或本機時間不準。有時實在腦袋實在轉不過來,你現在解決不了的問題(一直在想,怎麼用ASP或Javascript來解決),其他地方已經幫你解決了。



提醒自己:讓ASP.NET專注在網頁,資料的事就交給資料庫來處理。

4 則留言:

  1. 有辦法一次將當年度的『所有』月底日都找出來嗎???

    回覆刪除
  2. select dateadd(month,1,getdate()) 加 1 是下個月,加 2 就是下下個月,加 3 就是下下下個月 … 這會很難嗎? ^_^

    回覆刪除
  3. 是不難,但如何將『當年度』所有的月底日一次全部秀出來???用getdate()來處理,會隨時間軸改變而改變!!

    回覆刪除
  4. SELECT DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE() ), -1)

    這個語法比較短也可以有一樣的結果喔!
    參考來源:https://dotblogs.com.tw/lastsecret/2010/10/04/18097

    回覆刪除

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。