T-Sql

轉換和減去兩個日期

  • December 13, 2018

我正在嘗試獲取兩個日期之間的數字差異。(例如:2018 年 11 月 30 日 - 2018 年 11 月 5 日 = 25)

其中一個日期 (@EndOfMonth) 表示上個月的最後一天,並且正在轉換為“yyyymmdd”格式

BEGIN
DECLARE @EndOfMonth AS VARCHAR(10)
SET @EndOfMonth = (SELECT CONVERT(VARCHAR, DATEADD(m, DATEDIFF(m, 0, DATEADD(m, 1, DATEADD(MM, -1, @maxDwdate))), -1), 112))

我要從@EndOfMonth 中減去的第二個日期是一個名為“DUEDATE”的欄位,格式為“mm/dd/yyyy”。

這很容易實現,下面的範常式式碼顯示瞭如何執行此操作(將 DueDate 變數替換為表中的 DUEDATE 列。基本上,您使用 DATEDIFF 來獲取 DUEDATE 的月初,將一個月添加到該日期然後減去一天。這將始終為您提供 DUEDATE 月的 EoM 日期,無論該月有多少天。

然後,您可以簡單地執行 DATEDIFF 來計算兩個日期之間的天數。SQL Server 將隱式地將yyyymmdd轉換為 DATETIME 值以進行計算,但如果可能,出於性能原因應避免將 EndOfMonth 變數轉換為字元串。

DECLARE @EndOfMonth VARCHAR(10),
   @DueDate DATETIME = '12/14/2018'

SELECT @EndOfMonth = CONVERT(VARCHAR(10), DATEADD(d, -1, DATEADD(m, 1, DATEADD(m, DATEDIFF(m, 0, @DueDate), 0))), 112)

SELECT DATEDIFF(d, @DueDate, @EndOfMonth)

引用自:https://dba.stackexchange.com/questions/224936