তারা সমতুল্য নয়। Days দিন আগের রেকর্ডগুলি, তবে দিনের বর্তমান সময়ের আগে - কেবল # 2 প্রশ্নের মধ্যে ফেরত দেওয়া হবে:
যখন ব্যবহার দিন তুলনা DATEADD
ফাংশন , এটা বিবেচনা করে সময় অংশগ্রহণ করে না । সময়টি নির্বিশেষে রবিবার ও সোমবারের তুলনায় ফাংশনটি 1টি ফিরে আসবে।
ডেমো:
DECLARE @MyTable TABLE(pk INT, LogInsertTime DATETIME);
INSERT @MyTable
VALUES (1, DATEADD(HOUR, 1, CAST(DATEADD(DAY, -7, CAST (GETDATE() AS DATE))AS DATETIME))),
(2, DATEADD(HOUR, 23, CAST(DATEADD(DAY, -7, CAST (GETDATE() AS DATE)) AS DATETIME)));
DECLARE @DateTime DATETIME = GETDATE();
SELECT *
FROM @MyTable
WHERE DATEDIFF(DAY, LogInsertTime, @DateTime) > 7;
-- 0 records.
SELECT *
FROM @MyTable
WHERE LogInsertTime < @DateTime - 7;
-- 1 record.
প্রথম ক্যোয়ারির যৌক্তিক সমতুল্য যা সম্ভাব্য সূচক ব্যবহার সক্ষম করে তা হয় সময়ের অংশটি সরিয়ে ফেলা @DateTime
বা এতে সময় সেট করা 0:00:00
:
SELECT *
FROM @MyTable
WHERE LogInsertTime < CAST(@DateTime - 7 AS DATE);
প্রথম ক্যোয়ারিটি কেন সূচকটি ব্যবহার করতে পারে না LogInsertTime
তার কারণ হ'ল কলামটি কোনও ফাংশনের মধ্যেই সমাধিস্থ হয়েছে। ক্যোরি # 2 কলামটিকে একটি ধ্রুবক মানের সাথে তুলনা করে যা অপ্টিমাইজারটিকে একটি সূচক নির্বাচন করতে সক্ষম করে LogInsertTime
।
LogInsertTime
?