sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan sammenligner jeg to datetime-felter i SQL Server 2005?

Spørgsmålet er uklart, men det ser ud til, at du forsøger at lave et lighedsmatch, der ikke returnerer de rækker, du forventer, så jeg gætter på, at problemet er, at millisekunderne er problematiske. Der er flere tilgange her:

  1. formater begge værdier (som varcharetc) ved hjælp af CONVERT :dyrt for CPU, kan ikke bruge indeks
  2. brug DATEDIFF/DATEPART til at lave tema - lignende, men ikke helt billigt
  3. opret et område at søge mellem

Den 3. mulighed er næsten altid den mest effektive, da den kan gøre god brug af indeksering og ikke kræver masser af CPU.

For eksempel, i ovenstående, da din præcision er sekunder*, ville jeg bruge:

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

derefter tilføje et WHERE af formularen:

WHERE column_datetime >= @p_date AND column_datetime < @end

Dette vil fungere bedst, hvis du har et klynget indeks på column_datetime, men burde stadig fungere OK, hvis du har et ikke-klynget indeks på column_datetime.

[*=hvis @p_date inkluderer millisekunder, skal du tænke mere over, om du vil trimme disse ms via DATEADD , eller lav et mindre område osv.]



  1. mysql-forespørgselsresultat til php-array

  2. Hvordan forpligter jeg de ændringer, jeg har foretaget til en datatabel, til den tabel, hvorfra jeg hentede den?

  3. Fuldtekstindeksering på MyISAM, enkelt kolonne vs indeksering af flere kolonner

  4. initdb:kunne ikke ændre tilladelserne til mappen på Postgresql-beholderen