2009-05-19 17 views
14

estoy tratando de consultar un rango específico de tiempo:tiempo específico Rango de consultas en SQL Server

  • es decir 03/01/2009 a 03/31/2009
  • entre 06 a.m.-10 p.m. cada día
  • mar/miércoles/jueves solamente

que he visto que se puede obtener datos de un rango particular, pero sólo por principio a fin y esto es un poco más específico. No vi ningún comando de SQL Server que me ayudara directamente en esto, así que ¿alguien más tiene alguna idea sobre cómo se formaría esto?

He visto this, pero no creo que sea lo suficientemente específico para este rango.

Gracias!

+0

¿Tiene la fecha y la hora en la misma columna, o por separado? –

+0

Misma columna: es solo un campo DateTime – Fry

Respuesta

24

Supongo que quiere los tres como parte de los criterios de selección. Necesitará algunas declaraciones en su ubicación, pero serán similares al enlace que contenía su pregunta.

SELECT * 
    FROM MyTable 
    WHERE [dateColumn] > '3/1/2009' AND [dateColumn] <= DATEADD(day,1,'3/31/2009') 
     --make it inclusive for a datetime type 
    AND DATEPART(hh,[dateColumn]) >= 6 AND DATEPART(hh,[dateColumn]) <= 22 
     -- gets the hour of the day from the datetime 
    AND DATEPART(dw,[dateColumn]) >= 3 AND DATEPART(dw,[dateColumn]) <= 5 
     -- gets the day of the week from the datetime 

Espero que esto ayude.

+0

Eres mi héroe: D – Fry

+1

La sintaxis para dateadd es 'DATEADD (datepart, number, date)' La muestra debe ser: '... <= DATEADD (día, 1, '3/31/2009')' Fuente: [Technet] (http://technet.microsoft.com/en-us/library/ms186819 (v = sql.90) .aspx) – user797717

+0

Sí, pero ¿cómo haría esto si el tiempo no fuera preciso para hora exacta, por ejemplo, si desea en el rango de tiempo de 6:15 AM a 10:35 AM? – Marko

0
select * from table where 
(dtColumn between #3/1/2009# and #3/31/2009#) and 
(hour(dtColumn) between 6 and 22) and 
(weekday(dtColumn, 1) between 2 and 4) 
+3

¿Es válida la sintaxis de SQL Server 2005? No está de acuerdo con mi SQLServer – Fry

+0

¿Esto funciona incluso en 2008? Parece que las funciones de fecha útiles tomaron hasta 2012 para estar disponibles. – ficuscr

+0

Realmente no creo que sea un método real de T-sql. – ficuscr

5

puede probar esto (no tengo servidor SQL aquí hoy, así que no puedo verificar la sintaxis, lo siento)

select attributeName 
    from tableName 
where CONVERT(varchar,attributeName,101) BETWEEN '03/01/2009' AND '03/31/2009' 
    and CONVERT(varchar, attributeName,108) BETWEEN '06:00:00' AND '22:00:00' 
    and DATEPART(day,attributeName) BETWEEN 2 AND 4 
+0

Gracias :) Es muy similar a lo que sugirió Giggy. Intenté esto originalmente después de su sugerencia, pero decidí ir con signos estrictos de igualdad ya que eliminaron la ambigüedad de qué parte de 'entre' es inclusiva :) – Fry

0

I (usando PostgrSQL en PGadmin4) consultan para obtener resultados que son después o en 21 de noviembre de 2017 al mediodía, así (teniendo en cuenta el formato de visualización de horas en mi base de datos):

select * from Table1 where FIELD >='2017-11-21 12:00:00' 
Cuestiones relacionadas