首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 自訂函數中使用 GETDATE() 的替代方案

     編輯:MySQL 資料庫相關知識

問題背景

SQL Server 自訂函數不允許直接呼叫非確定性函數(如 GETDATE()、NEWID()、RAND()),否則會報錯。

解決方案:建立視圖包裝 GETDATE()

步驟 1:建立視圖

CREATE VIEW v_date AS
SELECT CONVERT(VARCHAR(10), GETDATE(), 20) AS dt;  -- 格式:yyyy-mm-dd

步驟 2:在函數中查詢視圖取得日期

CREATE FUNCTION my_func()
RETURNS VARCHAR(10)
AS
BEGIN
    DECLARE @getdate VARCHAR(10);
    SELECT @getdate = dt FROM v_date;
    RETURN @getdate;
END
GO

原理說明

  • 視圖 v_date 每次查詢時會即時執行 GETDATE(),取得當前日期。
  • 函數透過 SELECT @var = col FROM view 間接取得日期值,繞過限制。
  • CONVERT(VARCHAR(10), GETDATE(), 20) 只取日期部份(不含時間),若需完整時間請調整格式碼。

替代寫法(SQL Server 2012+)

若僅需在預存程序或批次中使用,可直接宣告變數:

DECLARE @today DATE = CAST(GETDATE() AS DATE);

但此寫法不可用於函數內部。

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