簡體   English   中英

比較SQL中的生效日期

[英]Comparing effective dates in SQL

想知道為什么在需要查看有效的開始日期和結束日期的WHERE子句中選擇記錄更好?

目前,這就是我過去在MS SQL Server上所做的方式。 只是擔心日期而不是時間。 我正在使用SQL Server 2005。

AND Convert(datetime, Convert(char(10), ep.EffectiveStartDate, 101))
   <= Convert(datetime, Convert(char(10), GetDate(), 101))
AND Convert(datetime, Convert(char(10), ep.EffectiveEndDate, 101))
   >= Convert(datetime, Convert(char(10), GetDate(), 101))

太糟糕了,看看“ 僅在數據庫中您可以通過更改幾行代碼獲得1000%+的改進”,以了解如何優化此代碼 ,因為這是不可靠的

還要簽出不帶時間的獲取日期時間帶日期的查詢優化

@Darren Kopp-您可以使用

set @date2 = '20201001'

這會讓你失去演員。

footndale-您也可以使用日期算術刪除時間。 就像是

select dateadd(d, datediff(d, 0, CURRENT_TIMESTAMP), 0)

獲取今天的日期(無時間)。 我相信這比來回轉換更有效。

@達倫·科普

注意BETWEEN,請查看SQL Server之間的日期之間如何工作?

AND DateDiff(Day, 0, GetDate()) + 1 > ep.EffectiveStartDate
AND DateDiff(Day, 0, GetDate()) < ep.EffectiveEndDate

我認為您會發現這些條件可以提供最佳性能。 這將愉快地利用索引。

我也非常確定這是正確的,並將提供正確的數據。 沒有時間部分的日期無需進一步計算。

嘗試

ep.EffectiveStartDate BETWEEN @date1 AND @date2

你會在哪里做類似的事情

declare @date1 datetime, @date2 datetime;  
set @date1 = cast('10/1/2000' as datetime)  
set @date2 = cast('10/1/2020' as datetime)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM