Най-разумният начин да направите това е да премахнете частта от времето от стойностите за дата и час и да сравните резултатите, а най-добрият начин да отделите частта от време от дата и час е така:
cast(current_timestamp as date)
Използвах и застъпвах процес, който изглеждаше като един от следните два реда:
cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))
Но сега този Sql сървър има Date
тип, който не съдържа времеви компонент, има малка причина да се използва някоя от тези техники.
Още едно нещо, което трябва да имате предвид, е, че това все още ще блокира заявка, ако трябва да го направите за две стойности за дата и час за всеки ред в клауза where или условие за присъединяване. Ако е възможно, искате да изчислите това по някакъв начин, така че да бъде предварително изчислено, доколкото е възможно, например с помощта на изглед или изчислена колона.
И накрая, обърнете внимание, че функцията DATEDIFF сравнява броя на преминатите граници. Това означава датата в дните между '2009-09-14 11:59:59'
и '2009-09-15 00:00:01'
е 1, въпреки че са изминали само 2 секунди, но DATEDIFF в дни между '2009-09-15 00:00:01'
и '2009-09-15 11:59:59'
все още е нула, въпреки че са изминали 86 398 секунди. Въобще не се интересува от времевата част там, а само за границите. В зависимост от това какво се опитва да направи вашата заявка, може да успеете да използвате това в своя полза.