首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 使用格式化字串自訂日期轉字串:自訂函數 fn_DateToString

     編輯:關於SqlServer

SQL Server 原生 CONVERT 僅支援固定格式代碼,無法像 C# DateTime.ToString("yyyy-MM-dd") 靈活自訂。本文提供自訂純量函數 fn_DateToString,支援 yyyy、MM、dd 佔位符替換。

函數定義

CREATE FUNCTION dbo.fn_DateToString
(
    @date   DATETIME,
    @format VARCHAR(20)
)
RETURNS VARCHAR(20)
AS
BEGIN
    DECLARE @result VARCHAR(20);
    -- 以 CONVERT 103 (dd/MM/yyyy) 為基底擷取日/月/年
    SET @result = REPLACE(
                        REPLACE(
                            REPLACE(@format,
                                'yyyy', '20' + SUBSTRING(CONVERT(CHAR(8), @date, 3), 7, 2)),
                            'MM', SUBSTRING(CONVERT(CHAR(8), @date, 3), 4, 2)),
                        'dd', SUBSTRING(CONVERT(CHAR(8), @date, 3), 1, 2));
    RETURN @result;
END

使用範例

SELECT dbo.fn_DateToString(GETDATE(), 'yyyy-MM-dd');   -- 2024-05-18
SELECT dbo.fn_DateToString(GETDATE(), 'MM/dd/yyyy');   -- 05/18/2024
SELECT dbo.fn_DateToString(GETDATE(), 'yyyy年MM月dd日'); -- 2024年05月18日

擴展方向

  • 支援 HH、mm、ss、fff 時間佔位符 (擷取 CONVERT(CHAR(12), @date, 114) 或 DATEPART)。
  • 支援 yyyy 四位數年份 (目前固定 20 前綴,需改用 YEAR(@date) 格式化)。
  • 加入文化特性參數 (如月份名稱) 需搭配 CLR 函數或 FORMAT (SQL 2012+)。

現代替代方案 (SQL 2012+)

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd', 'zh-TW');  -- 內建格式化、支援文化特性

FORMAT 依賴 .NET Framework,效能較純 T-SQL 函數低,高頻呼叫場景仍建議自訂函數或應用層格式化。

結語

fn_DateToString 以純 T-SQL 實現類 C# 格式化字串體驗,適用 SQL 2005/2008/R2 等舊版環境。新版環境優先使用 FORMAT 或應用層格式化,兼顧效能與國際化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved