Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como comparar dois campos de data e hora no SQL Server 2005?


A questão não está clara, mas parece que você está tentando fazer a correspondência de igualdade que não está retornando as linhas que você espera, então suponho que o problema é que os milissegundos estão sendo problemáticos. Existem várias abordagens aqui:
  1. formate ambos os valores (como varcharetc) usando CONVERT :caro para CPU, não pode usar índice
  2. use DATEDIFF/DATEPART para fazer matemática - semelhante, mas não muito tão caro
  3. crie um intervalo para pesquisar

A 3ª opção é quase sempre a mais eficiente, pois pode fazer bom uso da indexação e não requer muita CPU.

Por exemplo, no exemplo acima, como sua precisão é segundos*, eu usaria:
DECLARE @end datetime
SET @end = DATEADD(ss,1,@p_date)

em seguida, adicione um WHERE do formulário:
WHERE column_datetime >= @p_date AND column_datetime < @end

Isso funcionará melhor se você tiver um índice clusterizado em column_datetime, mas ainda deve funcionar bem se você tiver um índice não clusterizado em column_datetime.

[*=se @p_date incluir milissegundos, você precisaria pensar mais sobre cortar esses ms via DATEADD , ou faça um intervalo menor, etc]