2009-05-19 12 views
14

Je suis en train d'interroger une gamme spécifique de temps:Plage de temps spécifique dans la requête SQL Server

  • -à-dire 3/1/2009 - 3/31/2009
  • entre chaque jour 6 heures-22 heures
  • mar/mer/jeudi seulement

J'ai vu que vous pouvez obtenir des données pour une plage particulière, mais seulement pour début à la fin, ce qui est tout à fait un peu plus précis. Je n'ai vu aucune commande SQL Server qui m'aiderait directement à ce sujet, alors quelqu'un d'autre a-t-il des idées sur la façon dont vous formeriez cela?

J'ai vu this, mais je ne pense pas que ce soit assez spécifique pour cette gamme.

Merci!

+0

Avez-vous la date et l'heure dans la même colonne, ou séparément? –

+0

Même colonne - c'est juste un champ DateTime – Fry

Répondre

24

Je suppose que vous voulez tous les trois dans le cadre des critères de sélection. Vous aurez besoin de quelques déclarations dans votre emplacement, mais elles seront similaires au lien que contenait votre question.

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 

Espérons que cela aide.

+0

Vous êtes mon héros: D – Fry

+1

La syntaxe pour dateadd est 'DATEADD (datepart, nombre, date)' L'exemple doit être: '... <= DATEADD (jour, 1, '3/31/2009')' Source: [Technet] (http://technet.microsoft.com/fr-fr/library/ms186819 (v = sql.90) .aspx) – user797717

+0

Ouais mais comment feriez-vous cela si le temps n'était pas précis à heure exacte par exemple si vous voulez dans la plage horaire de 6h15 à 10h35? – 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

Cette syntaxe SQL Server 2005 est-elle valide? Ce n'est pas en fonction de mon SQLServer – Fry

+0

Est-ce que cela fonctionne même en 2008? On dirait que les fonctions de date utiles ont pris jusqu'en 2012 pour devenir disponibles. – ficuscr

+0

Je ne pense vraiment pas que ce soit une vraie méthode T-sql. – ficuscr

5

vous pouvez essayer (je n'ai pas serveur sql ici aujourd'hui, donc je ne peux pas vérifier la syntaxe, désolé)

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

Merci :) C'est très similaire à ce que suggérait Giggy. J'ai essayé cela à l'origine après sa suggestion, mais j'ai décidé d'aller avec des signes d'égalité strictes car ils ont enlevé l'ambiguïté de quelle partie de 'entre' est inclusive :) – Fry

0

I (en utilisant PostgrSQL sur PGadmin4) demande pour des résultats après ou sur 21 novembre 2017 à midi, comme ceci (compte tenu du format d'affichage des heures sur ma base de données):

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