SQL Server:獲取本月最後一天[轉]
方法一:set @EndDate = dateadd(month, datediff(month, -1, @StoredDate), -1)
@StoredDate為本月的任意一天
這裏datediff(month, -1, @StoredDate)會返回從1900年1月1日為基準,算出此基準到@StoredDate的所有月數,再加上1(如果第二個參數為0,則不用加1)
dateadd(month, 0, 0) 返回:1900-01-01 00:00:00.000
dateadd(month, 0, -1) 返回:1899-12-31 00:00:00.000所以最後一個參數表示天數,正數就加,負數為減;
dateadd(month, 1, 0) 返回:1900-02-01 00:00:00.000所以第二個參數表示月數,正數為加,負數為減
由此可以推出:dateadd(month, datediff(month, -1, @StoredDate), -1) 為從1900年1月1日到@StoredDate的月數加1,轉化為現在的月份(並且是第一天),然後天數減去1,也可以將datediff(month, -1, @StoredDate)理解為獲取到下個月的所有月數,然後在此基礎上再減去1天,就是@StoredDate所在本月最後一天
方法二:set @EndDate = dateadd(ms, -3, dateadd(MONTH, datediff(MONTH, 0, @StoredDate) + 1, 0))
@StoredDate為本月的任意一天
同上,datediff(MONTH, 0, @StoredDate) + 1表示獲取到本月的所有月數再加1,即獲取到下月的所有月數,dateadd(MONTH, datediff(MONTH, 0, @StoredDate) + 1, 0)則表示獲取下月第一天,再減去3個毫秒,得到本月最後一天的23:59:59.997,這裏只是取了個巧而已
這兩種方法,雖然沒有什麽好壞之分,只要結果正確就行,但是個人覺得其實第一種方法更簡便些,畢竟少繞一次
SQL Server:獲取本月最後一天[轉]