費用不僅在SELECT中使用DateAdd函數,而且在WHERE中使用DateAdd函數。 或者使用最初返回比我需要的更多數據的子查詢,但可以在數據庫上再次使用DateAdd函數的情況下進行過濾。SQL效率 - 使用dateAdd函數查詢兩次;或SubQuery和DateAdd函數一次;在日期之間
執行計劃似乎暗示它們就其而言是相同的。 我想知道哪個會更有效率?
DECLARE @DateFrom DateTime
SET @DateFrom = '2011-05-27'
DECLARE @DateTo DateTime
SET @DateTo = '2011-06-27'
SELECT id, name,
dateAdd(hour, datediff(hour, getdate(), getutcdate()), --UTC offset
dateadd(second, itsm_requiredbyx, '1/1/1970 12:00 AM')) as itsm_requiredbyx
FROM tablename
WHERE dateAdd(hour, datediff(hour, getdate(), getutcdate()), --UTC offset
dateadd(second, itsm_requiredbyx, '1/1/1970 12:00 AM'))
BETWEEN @DateFrom AND @DateTo
ORDER BY itsm_requiredbyx desc
---------------------------------------------------------------------------------------------
SELECT *
FROM
(
select id, name,
dateAdd(hour, datediff(hour, getdate(), getutcdate()), --UTC offset
dateadd(second, itsm_requiredbyx, '1/1/1970 12:00 AM')) as itsm_requiredbyx
from tablename
) RR
WHERE itsm_requiredbyx BETWEEN @DateFrom AND @DateTo
ORDER BY itsm_requiredbyx desc
我不認爲這很重要。但它看起來是在計算'itsm_requiredbyx'字段,然後檢查結果是否在兩個外部值'@ DateFrom'和'@ DateTo'之間。如果您不對該字段進行任何計算,而是對外部值執行(反向)計算,然後檢查「itsm_requiredbyx」是否在這兩個計算值之間,則查詢可以使用「itsm_requiredbyx」的索引。 – 2011-06-02 09:52:11
語法固定 - 謝謝。 – 2011-06-02 10:02:08
有一些區域設置與UTC的偏移量不是整個小時數。由於您似乎在嘗試編寫國際代碼,因此您可能需要注意這一點。 – 2011-06-02 13:29:53