Fecha y hora en donde cláusula

¿Cómo puedo seleccionar 12/20/2008 en where cláusula de sql?

El server es SQL Server 2005.

 select * from tblErrorLog where errorDate = '12/20/2008' 

 WHERE datetime_column >= '20081220 00:00:00.000' AND datetime_column < '20081221 00:00:00.000' 

En primer lugar, recomendaría utilizar el formatting estándar ISO-8601 para date / hora; funciona independientemente del idioma y la configuration regional en su SQL Server. ISO-8601 es el formatting YYYYMMDD , sin espacios ni guiones, solo los datos:

 select * from tblErrorLog where errorDate = '20081220' 

En segundo lugar, debe tener en count que SQL Server 2005 DATETIME siempre incluye una hora. Si busca una coincidencia exacta con solo la parte de la date, obtendrá solo las filas que coincidan con una hora de 0:00:00, nada más.

Puede usar cualquiera de las consultas de range recomendadas mencionadas, o en SQL Server 2008, puede usar la date de date DATE única o puede hacer una comprobación como:

 select * from tblErrorLog where DAY(errorDate) = 20 AND MONTH(errorDate) = 12 AND YEAR(errorDate) = 2008 

Cualquiera que funcione mejor para ti.

Si necesita hacer esta consulta con frecuencia, puede intentar normalizar DATETIME para include solo la date, o puede agregar columnas calculadas para DAY, MONTH y YEAR:

 ALTER TABLE tblErrorLog ADD ErrorDay AS DAY(ErrorDate) PERSISTED ALTER TABLE tblErrorLog ADD ErrorMonth AS MONTH(ErrorDate) PERSISTED ALTER TABLE tblErrorLog ADD ErrorYear AS YEAR(ErrorDate) PERSISTED 

y luego podrías consultar más fácilmente:

 select * from tblErrorLog where ErrorMonth = 5 AND ErrorYear = 2009 

Etcétera. Dado que esos campos se calculan y PERSISTEN, siempre están actualizados y siempre actualizados, y como están vigentes, incluso puede indexarlos si es necesario.

Usted no dice qué database está utilizando pero en MS SQL Server sería

 WHERE DateField = {d '2008-12-20'} 

Si es un campo de timestamp, entonces necesitarás un range:

 WHERE DateField BETWEEN {ts '2008-12-20 00:00:00'} AND {ts '2008-12-20 23:59:59'} 

Suponiendo que estamos hablando de SQL Server DateTime

Nota: BETWEEN incluye ambos extremos del range, por lo que técnicamente este patrón será incorrecto:

 errorDate BETWEEN '12/20/2008' AND '12/21/2008' 

Mi método preferido para un range de time como ese es:

 '20081220' <= errorDate AND errordate < '20081221' 

Funciona con índices comunes (escaneo de range, SARGable, sin function) y corta correctamente la medianoche del día siguiente, sin depender de la granularidad de time de SQL Server (p. Ej., 23: 59: 59.997)

Use una function de conversión para get todas las inputs para un día en particular.

 Select * from tblErrorLog where convert(date,errorDate,101) = '12/20/2008' 

Vea CAST y CONVERT para más información

 select * from tblErrorLog where errorDate BETWEEN '12/20/2008' AND DATEADD(DAY, 1, '12/20/2008')