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

SQL Server 取得當日最大時間值 (23:59:59.997) 的標準寫法

     編輯:MySQL 資料庫相關知識

在撰寫「當日結束時間」作為查詢範圍上界時,需精確到 SQL Server `DATETIME` 型別的最小解析度 3.33 毫秒,即 23:59:59.997。以下提供標準、可重複使用的計算方式。

核心邏輯

  1. 取得「今天 00:00:00.000」 (午夜零時)。
  2. 加 1 天 → 「明天 00:00:00.000」。
  3. 減 3 毫秒 → 「今天 23:59:59.997」。

T-SQL 程式碼

DECLARE @Now DATETIME = CURRENT_TIMESTAMP;        -- 目前日期時間
DECLARE @Midnight DATETIME = CAST(CAST(@Now AS DATE) AS DATETIME); -- 今天 00:00:00

-- 取得今天最大時間值
SELECT DATEADD(MILLISECOND, -3, DATEADD(DAY, 1, @Midnight));
-- 結果範例:2011-09-09 23:59:59.997

可重複使用的純量函數

CREATE FUNCTION dbo.fn_EndOfDay (@dt DATETIME)
RETURNS DATETIME
AS BEGIN
    DECLARE @Midnight DATETIME = CAST(CAST(@dt AS DATE) AS DATETIME);
    RETURN DATEADD(MS, -3, DATEADD(DAY, 1, @Midnight));
END;
GO

-- 使用範例
SELECT dbo.fn_EndOfDay(GETDATE());      -- 今天結束
SELECT dbo.fn_EndOfDay('2023-12-25');   -- 指定日期結束

應用場景:日期區間查詢

DECLARE @StartDate DATE = '2023-01-01';
DECLARE @EndDate   DATE = '2023-01-31';

SELECT * FROM Orders
WHERE OrderTime >= @StartDate                    -- 含 00:00:00.000
  AND OrderTime <= dbo.fn_EndOfDay(@EndDate);    -- 含 23:59:59.997

補充:SQL Server 2008+ 新型別

  • DATETIME2 精度 100 奈秒,最大值 23:59:59.9999999,可用 DATEADD(NANOSECOND, -100, ...)。
  • DATE 型別僅存日期,若欄位為 `DATE` 型別,直接 `<= @EndDate` 即可,無需計算時間部分。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved