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ů:
- formátujte obě hodnoty (jako varcharetc) pomocí CONVERT :drahé pro CPU, nelze použít index
- použijte DATEDIFF/DATEPART k výpočtu – podobné, ale ne úplně nejdražší
- 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.]