T-Sql
SQL Server 2000 - 使用 DATEADD 和 DATEDIFF 從 datetime 列結果中剝離時間是否仍然返回帶有時間的結果?
我知道有幾篇關於從日期時間列中刪除時間部分的文章。並且每個人都建議 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
此處用於格式化輸出的日期值,而不是為了進行比較而更改它。我仍然會像你在程式碼中那樣做。