Array
(
)

Conversao de datas para clausula where

Josehenrique
   - 21 jul 2009

Senhores, muito obrigado antecipadamente aqueles que puderem me ajudar.

Estou com o seguinte problema ( pouco conhecimento de SQLServer)

tenho um qry basicamente assim

#Código

 
select * from 
  execucoes e
where
    (cast(floor(cast(E.Data as float)) as datetime) = isnull(:Data, cast(floor(cast(E.Data as float)) as datetime)))


Reparem com foi truncada essa data, esse exemplo funciona, mas eu preciso complicar o mesmo.
De forma que:
Eu terei de passar duas datas DATA_INI e DATA_FIM sendo que se o user preencher as duas terei de usar um BETWEEN para verificar o result, mas se ele passar somente a primeira data DATA_INI , eu teria de executar a verificacao somente com a data passada.

Seque abaixo uma tentativa minha que nao deu certo, talvez com esse codigo fique mais facil de visualizar o que eu pretendo.

#Código
 
select
e.idexecucao 
,cast(floor(cast(E.Data as float)) as datetime) 
from
execucoes e 
where
( cast(floor(cast(E.Data as float)) as datetime) between 
       isnull(:DATA_INI, cast(floor(cast(E.Data as float)) as datetime)) and
       isnull(:DATA_FIM , cast(floor(cast(E.Data as float)) as datetime)) ) or
     (cast(floor(cast(E.Data as float)) as datetime) = isnull(:DATA_INI, cast(floor(cast(E.Data as float)) as datetime)) and
  :DATA_FIM is null
)
 order by
e.data


Se algum dos colegas puderem me ajudar, ficarei muito grato.