Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да сравня две полета за дата и час в SQL Server 2005?

Въпросът е неясен, но изглежда, че се опитвате да направите съвпадението за равенство, което не връща редовете, които очаквате, така че предполагам, че проблемът е, че милисекундите са проблематични. Тук има няколко подхода:

  1. форматирайте и двете стойности (като varcharetc) с помощта на CONVERT:скъпо за CPU, не може да използва индекс
  2. използвайте DATEDIFF/DATEPART, за да ги изчислите - подобно, но не съвсем толкова скъпо
  3. създайте диапазон за търсене между

Третият вариант почти винаги е най-ефикасен, тъй като може да използва добре индексирането и не изисква много CPU.

Например в горното, тъй като вашата точност е секунди*, бих използвал:

DECLARE @end datetime
SET @end = DATEADD(ss,1,@p_date)

след това добавете WHERE от формата:

WHERE column_datetime >= @p_date AND column_datetime < @end

Това ще работи най-добре, ако имате клъстериран индекс на column_datetime, но все пак трябва да работи добре, ако имате неклъстерен индекс на column_datetime.

[*=ако @p_date включва милисекунди, трябва да помислите повече дали да отрежете тези ms чрез DATEADD , или направете по-малък диапазон и т.н.]



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да извличате данни от база данни на sql сървър в php без опресняване на страницата

  2. За да промените формата на датата в sql

  3. Как да завъртите неизвестен брой колони и без агрегат в SQL Server?

  4. Проста инструкция за актуализиране, така че на всички редове да се присвоява различна стойност

  5. ЗА XML PATH(''):Екраниране на специални символи