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

SQL Server 取得當日午夜 (00:00:00) 的三種寫法

     編輯:SQL Server 2005

方法一:DATEADD + DATEDIFF (全版本通用,效能最佳)

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0);

原理:以基準日 0 (1900-01-01) 計算日差,再加回去,時間歸零。

方法二:CAST 轉 DATE 再轉 DATETIME (SQL 2008+)

-- 版本 1
SELECT CAST(CAST(CAST(GETDATE() AS DATE) AS CHAR(10)) + ' 00:00:00.000' AS DATETIME);
-- 版本 2 (更簡潔)
SELECT CAST(CAST(GETDATE() AS DATE) AS DATETIME);

SQL 2008 引入 DATE 型別,直接截斷時間部分。

方法三:自訂函數 (參考 Infor Syteline)

CREATE FUNCTION dbo.MidnightOf(@dt DATETIME)
RETURNS DATETIME
AS BEGIN
    RETURN DATEADD(year, DATEPART(year, @dt)-2000,
           DATEADD(month, DATEPART(month, @dt)-1,
           DATEADD(day, DATEPART(day, @dt)-1, '2000')));
END

效能比較

寫法CPU (ms/10萬次)適用版本
DATEADD/DATEDIFF~152000+
CAST DATE~222008+
自訂函數~452000+

建議生產環境直接使用 方法一,無版本限制且效能最好。

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