利用 T-SQL 產生日期清單 (萬年曆) 並測試日期轉民國年函數對效能影響
SELECT @sdate = '19120101', @edate = '29101231';
;WITH cte AS (
SELECT [date] = @sdate
UNION ALL
SELECT [date] + 1 FROM cte WHERE ([date] < @edate)
)
SELECT [date]
FROM cte
OPTION (MAXRECURSION 0);
GO
利用 SQL Server 2005 以後支援的遞迴式 CTE 可以輕鬆完成此一需求,起始、結束日期限定在西元 1912 年以及 2910 年,目的是讓民國年落在 1 ~ 999 區間。(想產生萬年曆的人請自行修改區間)
接著就來套轉民國年函數看看,底下是測試截圖:


套用前後執行時間增加了 5 秒以上,不過這是將近一千年的天數所累積的處理時間,除非是千年修為的蜘蛛精,不然不會有機會這樣用吧?來看看人類比較有可能用到的,列出 5 年的日期:


由數據顯示,耗時的增加應該還在可接受的範圍,這也是為什麼我在分享文章中回覆效能影響應該不明顯。(其實我甚至測過 10 年的天數,結果仍舊是影響不大)
結論是:以本例來說,轉民國年函數只用在 SELECT 最終輸出,而不是 WHERE 篩選欄位的前提下,對效能的影響不大,因此有需要的人請安心服用吧。