2009-05-19 21 views
14

Ben belirli bir zaman aralığı sorgulamak çalışıyorum SQL Server Aralığı Sorgu:Belirli Saat

  • yani 2009/03/01 - 3/31/2009
  • am-10pm 6 arasında her gün
  • Sal/Çar/Per sadece
  • Ben belirli bir aralığı için veri alabilirsiniz, ama sadece başlangıç ​​için bitirmek ve bu biraz daha özeldir o gördüğüm

. Doğrudan bu konuda bana yardımcı olacak herhangi bir SQL Server komutunu görmedim, bu yüzden bunu nasıl şekillendireceğiniz konusunda herhangi bir fikrin var mı?

this'u gördüm, ancak bu aralık için neredeyse yeterli olduğunu sanmıyorum.

Teşekkürler!

+0

Aynı sütunda veya saatinizde tarih ve saatiniz var mı? –

+0

Aynı Sütun - sadece bir DateTime alanı – Fry

cevap

24

Seçim ölçütlerinin bir parçası olarak bunların üçünü de istediğinizi varsayarım. Bulunduğunuz yerde birkaç ifadeye ihtiyacınız olacaktır, ancak sorunuzun içerdiği bağlantıya benzerler.

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 

Bu yardımcı olur umarım.

+0

Benim kahramanımsın: D – Fry

+1

dateadd için sözdizimi 'DATEADD (tarih bölümü, sayı, tarih)' Örnek olmalıdır: '... <= DATEADD (gün, 1, '3/31/2009')' Kaynak: [Technet] (http://technet.microsoft.com/en-us/library/ms186819 (v = sql.90) .aspx) – user797717

+0

Evet ama zaman kesin olmasaydı nasıl yaparsın? Tam saat, örneğin saat 6:15 ile 10:35 arasında mı istersin? – 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

Bu geçerli bir SQL Server 2005 sözdizimi? Bu benim SQLServer – Fry

+0

'a göre değil Bu, 2008'de bile çalışıyor mu? Kullanıma sunulması için 2012 yılına kadar yararlı tarih işlevleri gibi görünüyor. – ficuscr

+0

Gerçekten bunun gerçek bir T-sql yöntemi olduğunu düşünmüyorum. – ficuscr

5

Eğer

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

Teşekkürler :) Giggy'nin önerdiği şeye çok benziyor. Bunu önerisinden sonra ilk başta denedim, ama 'ara' kavramının kapsayıcı kısmının belirsizliğini ortadan kaldırdıkça katı eşitlik işaretleriyle gitmeye karar verdim :) – Fry

0
I (PGadmin4 üzerinde PostgrSQL kullanarak)

sonra veya üzerinde sonuçlar için sorgulanan (yani, üzgünüm sözdizimi doğrulayamadığı Sql burada sunucu bugün gerekmez) bu deneyebilirsiniz 21 Kasım 2017, öğlen saatlerinde (veritabanımdaki saatlerin biçimini göz önüne alarak):

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