sql >> Databáze >  >> RDS >> Sqlserver

Jak porovnám dvě pole data a času v SQL Server 2005?

Otázka je nejasná, ale vypadá to, že se pokoušíte provést shodu rovnosti, která nevrací řádky, které očekáváte, takže hádám, že problém je v tom, že milisekundy jsou problematické. Zde je několik přístupů:

  1. formátujte obě hodnoty (jako varcharetc) pomocí CONVERT :drahé pro CPU, nelze použít index
  2. použijte DATEDIFF/DATEPART k výpočtu – podobné, ale ne úplně nejdražší
  3. vytvořte rozsah pro vyhledávání

3. možnost je téměř vždy nejúčinnější, protože dokáže dobře využít indexování a nevyžaduje velké množství CPU.

Například ve výše uvedeném případě, protože vaše přesnost je v sekundách*, bych použil:

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

poté přidejte WHERE formuláře:

WHERE column_datetime >= @p_date AND column_datetime < @end

To bude fungovat nejlépe, pokud máte seskupený index na column_datetime, ale mělo by to fungovat dobře, pokud máte index bez clusterů na column_datetime.

**=pokud @p_date zahrnuje milisekundy, musíte si více rozmyslet, zda tyto ms zkrátit pomocí DATEADD , nebo proveďte menší rozsah atd.]



  1. Jak mohu vložit do dvou tabulek najednou v uložené proceduře?

  2. Jak nastavit řádek MySQL na READ-ONLY?

  3. Řazení na základě dalších a předchozích záznamů v SQL

  4. Echo v syntaxi heredoc / nowdoc