web-dev-qa-db-fra.com

Requête de plage de temps spécifique dans SQL Server

J'essaie d'interroger une plage de temps spécifique:

  • soit 01/03/2009 - 31/03/2009
  • entre 6 h et 22 h chaque jour
  • Mardi/mercredi/jeudi uniquement

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

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

Merci!

19
Fry

Je suppose que vous voulez que ces trois éléments fassent partie des critères de sélection. Vous aurez besoin de quelques déclarations dans votre où, mais elles seront similaires au lien contenu dans 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

J'espère que cela t'aides.

29
Giggy

vous pouvez essayer ceci (je n'ai pas de 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
6
northpole

Je (en utilisant PostgreSQL sur PGadmin 4) recherche des résultats après ou le 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' 
1
Z.storch
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) 
0