Aveces utilizamos variables DateTime y guardamos fecha y hora, por ejemplo en una tabla de LOG, pero el problema es que luego deseamos realizar un filtro solo por la fecha y tendremos problemas les podre un ejemplo:
Registro1 01/01/2010 01:01:12
Registro2 02/01/2010 12:50
Si quiero realizar un filtro que devuelva todos los registros del 2 de diciembre al 2 de enero seria asi:
SELECT Registro FROM Registros
WHERE Fecha BETWEEN ‘02/12/2009’ AND ‘02/01/2010’
Solo me traerá el registro uno, ya que al tomar la hora toma la Fecha de registro2 con una fecha mayor a la ingresada en el filtro .
La solución es realizar una doble conversión primero a Varchar y luego a DateTime
SELECT Registro
FROM Registros
WHERE CONVERT(DateTime,CONVERT(varchar, Fecha , 101),103)
BETWEEN ‘02/12/2009’ AND ‘02/01/2010’
De esta manera pueden quitar la hora, tanto para comprar como para algún dato que entre como parámetro algún procedimiento almacenado o función. pueden jugar con el formato de la conversion si quieren otro tipo de resultados.
Espero que a todos les sirva, si les sirve me cuentan :).
Convert(Char(10), upr3.CHEKDATE, 101
Convert(Char(10), upr3.CHEKDATE, 101)
Me sale :
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
fijate si como dice Josue Flores te funciona Convert(Char(10), upr3.CHEKDATE, 101)