2010-11-11 12 views
32

Dada una tabla con una columna de fecha y hora, ¿cómo consulto filas donde la fecha coincide con el valor que especifico pero ignora la porción de tiempo?Cómo seleccionar filas para una fecha específica, ignorando el tiempo en SQL Server

Por ejemplo, select * from sales where salesDate = '11/11/2010'

Para esta consulta que no se preocupan por el momento. Otras consultas requieren el componente de tiempo, por lo que no podemos almacenar solo el componente de fecha.

Gracias!

Respuesta

41

puede quitar el componente de tiempo al comparar:

SELECT * 
FROM sales 
WHERE CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, salesDate))) = '11/11/2010' 

Otro enfoque es cambiar la selección para cubrir todo el tiempo entre el inicio y el final de la fecha:

SELECT * 
FROM sales 
WHERE salesDate BETWEEN '11/11/2010 00:00:00.00' AND '11/11/2010 23:59:59.999' 
+1

No estoy recibiendo con una solución de la suya –

+0

Lamento escuchar eso. ¿Seguro que los intervalos de fechas son correctos y que los datos que coinciden con ellos existen en la base de datos? – Oded

0
select * from sales where salesDate between '11/11/2010' and '12/11/2010' --if using dd/mm/yyyy 

La forma más correcta de hacerlo:

DECLARE @myDate datetime 
SET @myDate = '11/11/2010' 
select * from sales where salesDate>[email protected] and salesDate<dateadd(dd,1,@myDate) 

Si sólo se especifica la fecha, significa la medianoche total. Si desea asegurarse de que los intervalos no se superpongan, cambie el intervalo con un par de >= y <

puede hacerlo dentro de una sola declaración, pero es solo que el valor se usa dos veces.

0

Algo como esto:

select 
    * 
from sales 
where salesDate >= '11/11/2010' 
    AND salesDate < (Convert(datetime, '11/11/2010') + 1) 
0
select 
    * 
from sales 
where 
    dateadd(dd, datediff(dd, 0, salesDate), 0) = '11/11/2010' 
7

sé que ha pasado un tiempo en esta pregunta, pero yo estaba buscando la misma respuesta y encontramos este parece ser la solución más simple:

select * from sales where datediff(dd, salesDate, '20101111') = 0 

realidad lo uso más para encontrar cosas en el último día o dos, por lo que mi versión es similar a esto:

select * from sales where datediff(dd, salesDate, getdate()) = 0 

y cambiando el 0 por hoy a un 1 consigo las transacciones de ayer, 2 es el día antes de eso, y así sucesivamente. Y si quieres todo para la última semana, simplemente cambia los iguales a un menos-que-o-igual-a:

select * from sales where datediff(dd, salesDate, getdate()) <= 7 
+0

Buena solución. Confirmado para trabajar con h2 db si cambia el formato de fecha a 'aaaa-MM-dd'. – adam0404

-1

Prueba esto: resultado

true 
select cast(salesDate as date) [date] from sales where salesDate = '2010/11/11' 
false 
select cast(salesDate as date) [date] from sales where salesDate = '11/11/2010' 
Cuestiones relacionadas