T-Sql

SQL Server 2000 - 使用 DATEADD 和 DATEDIFF 從 datetime 列結果中剝離時間是否仍然返回帶有時間的結果?

  • May 10, 2017

我知道有幾篇關於從日期時間列中刪除時間部分的文章。並且每個人都建議 DATEADD 和 DATEDIFF 方法最適合性能,個人不應該採用將日期值轉換/轉換為 varchar 的過程。所以我想利用下面的函式,但我不明白為什麼我收到的結果仍然有與之關聯的時間值,儘管時間全為零?

提供有關我為什麼要了解此結果的更多資訊。我有一個儲存過程,我希望指定以下內容:

DECLARE @DateShippedBegin DATETIME
DECLARE @DateShippedEnd DATETIME
SET @DateShippedBegin = dateadd(dd, datediff(dd, 0, @DateShipped), 0)
SET @DateShippedEnd = dateadd(dd, datediff(dd, 0, @DateShipped) + 1, 0)

WHERE O.date_shipped >= @DateShippedBegin and O.date_shipped < @DateShippedEnd

但是,當我使用基本日期格式執行程序時,我沒有收到任何結果,因此我試圖了解我的程序採用的最佳概念。

Select DATEADD(dd, DATEDIFF(dd, 0, Getdate()), 0) from orders where order_no = 
'1247401'

起始日期值範例:

2017-05-010 08:40:18.287

查詢結果範例:

2017-05-10 00:00:00.000

datetime列總是包含一個時間部分。如果您將datetime列設置為“2017-05-10”,它將顯示為2017-05-10 00:00:00.

當您想將“僅日期”與datetime列進行比較時,請將兩個日期的時間部分設置為午夜。這通常被稱為“刪除”時間部分。

如果您想從輸出中消除時間部分,有多種選擇。您可以通過使用 . 拉出各個欄位,以您希望的任何格式建構日期DATEPART。然而,最常見的是,我看到人們將日期轉換為字元串並刪除時間部分:

SELECT CONVERT(varchar(10), GETDATE(), 120);

請注意,CONVERT此處用於格式化輸出的日期值,而不是為了進行比較而更改它。我仍然會像你在程式碼中那樣做。

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