不同語言,對於addMonths 認知差異,以閏年閏月為例

小小問題,大大深奧

一個簡單的加一個月,竟然可以引起這麼大的問題,為什麼二月底加一個月,卻不是三月底,而是3/29,這樣是少加了幾天呢?還是只是認知問題?

總有人反映,這樣就不是加1個月了阿!但是月份+1、還是天數+30,這又是不同的認知了。

下面讓我們繼續探討下去~

假設

開始日期:2020/02/29 分別用不同語言or語法,相加1個月各得到結論。

  1. C#:2020/02/29 + 1個月 = 2020/03/29
  2. SQLite:2020/02/29 + 1個月 = 2020/03/29
  3. SQLServer:2020/02/29 + 1個月 = 2020/03/29
  4. Oracle:2020/02/29 + 1個月 = 2020/03/31

上述列有的加到月底,有個加一個月的同一天,是認知問題還是?

C

DateTime date = new DateTime(2020, 2, 29);
Console.WriteLine(date);
Console.WriteLine(date.AddMonths(3).ToString("d"));

C#

SQLite

select date('2020-02-29'),date('2020-02-29','+1 month')

SQLite

SQLServer

select '2020-02-29',DATEADD(m,1,'2020-02-29')

SQLServer

Oracle

select add_months(to_date('20200229', 'yyyymmdd'),1) from dual;

Oracle

還有各種不同的語言,也歡迎各位在下方回覆討論。

[MSSQL]查詢資料庫使用資料量與實際檔案使用量

USE 資料庫名稱  
GO  
SET NOCOUNT ON  
DECLARE @tDBSize TABLE  
(DBName SYSNAME DEFAULT(DB_NAME()),  
 Fileid INT, FileGroup INT, TotalExtents INT,  
 UsedExtents INT, Name SYSNAME, FileName NVARCHAR(4000))   
  
DECLARE @tLogSize TABLE  
(DBName sysname, logsize float, used float, status int)  
  
INSERT @tDBSize(Fileid,FileGroup,TotalExtents,UsedExtents,Name,FileName)  
EXEC ('DBCC showfilestats')  
  
INSERT INTO @tLogSize  
EXECUTE ('DBCC SQLPERF(LOGSPACE)')  
  
SELECT D.DBName N'資料庫',D.Name N'資料檔案',  
 TotalExtents*64.0/1024 N'資料檔案使用硬碟空間(MB)',  
 UsedExtents*64.0/1024 N'資料實際使用空間(MB)',  
 logsize N'交易記錄檔整體使用的硬碟空間(MB)',  
 (logsize*used/100) N'交易記錄檔整體的實際使用(MB)'  
FROM @tLogSize L INNER JOIN @tDBSize D
ON L.DBName=D.DBName

上方語法 修改資料庫名稱即可得到資料庫的相關容量資訊