2009-05-19 14 views
14

Próbuję kwerendy określony zakres czasu:Specific Zakres czasu kwerend w SQL Server

  • tj 01/03/2009 - 3/31/2009
  • między 6 am-10pm codziennie
  • wt/wt/czw tylko

widziałem, że można uzyskać dane dla określonego zakresu, ale tylko na początku do końca i to jest trochę bardziej szczegółowe. Nie widziałem żadnych poleceń SQL Server, które pomogłyby mi bezpośrednio w tym zakresie, więc czy ktoś jeszcze myśli o tym, w jaki sposób to stworzysz?

Widziałem this, ale nie sądzę, że jest wystarczająco specyficzne dla tego zakresu.

Dzięki!

+0

Czy masz datę i godzinę w tej samej kolumnie lub osobno? –

+0

Ta sama kolumna - to tylko pole DateTime – Fry

Odpowiedz

24

Zakładam, że chcesz wszystkie trzy z nich jako część kryteriów wyboru. Będziesz potrzebował kilku stwierdzeń w swoim miejscu, ale będą one podobne do linku, który zawiera twoje pytanie.

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 

Mam nadzieję, że to pomoże.

+0

Jesteś moim bohaterem: D – Fry

+1

Składnia dla dateadd to 'DATEADD (datepart, number, date)' Próbka powinna być: '... <= DATEADD (dzień, 1, '3/31/2009')' Źródło: [Technet] (http://technet.microsoft.com/en-us/library/ms186819 (v = sql.90) .aspx) – user797717

+0

Tak, ale jak by to zrobić, gdyby czas nie był dokładny dokładna godzina na przykład, jeśli chcesz w przedziale czasowym od 6:15 AM do 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

To jest poprawna składnia SQL Server 2005? To nie jest zgodne z moim SQLServer – Fry

+0

Czy to działa nawet w 2008 roku? Wydaje się, że przydatne funkcje związane z datą trwały do ​​2012 roku. – ficuscr

+0

Naprawdę nie sądzę, że jest to prawdziwa metoda T-sql. – ficuscr

5

można spróbować to (nie mam SQL Server tu dzisiaj, więc nie mogę sprawdzić składnię, przepraszam)

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

Dzięki :) Jest bardzo podobny do tego, co zasugerował Giggy. Próbowałem tego pierwotnie po jego sugestii, ale zdecydowałem się pójść ze ścisłymi znakami równości, ponieważ usunęły niejednoznaczność tego, co zawiera część "między" :) – Fry

0

I (przy użyciu PostgrSQL na PGadmin4) zapytaliśmy o wyniki, które są po lub na 21 listopada 2017 r., W południe, w ten sposób (biorąc pod uwagę format wyświetlania godzin w mojej bazie danych):

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