2016-04-06 17 views
0

benim Sorgu üzerinde az 7 gün filtrelemek nasıl bu kişinin size RDBMS'yi etiketlemediyseniz benim sorguHaftalık raporda

SELECT 
    StudentID, DateRegistered 
FROM 
    StudentTable 
WHERE 
    DateDiff(day, DateRegistered, '" & Date.Now & "') <= 7 
+0

[Bu] (http://stackoverflow.com/questions/17717515/how-to-query-for-todays-date-and-7-days-before-data) – ArchLicher

+0

yardımcı olabilir Onun Doğru Sorgunuz iyi çalışacaktır. ancak tüm önceki kayıtları –

+0

döndürecek, evet 712'nin altındaki tüm kayıtları görüntülemek istiyorum – silentstorm21

cevap

1

ve her biri tarihlerde farklı işlevlere sahiptir, ancak iş ince:

SELECT StudentID, DateRegistered 
FROM StudentTable 
WHERE DateDiff(day, DateRegistered, now()) <= 7 

Ya

WHERE DateDiff(day, DateRegistered, getdate()) <= 7 

Ya da bu:

CURDATE() 

Tarihi seçmek için yerel DBMS'yi kullandığımı unutmayın, bunu PHP tarafında bir parametre ile yapmaya gerek yoktur.

+0

Bu yorum SQL Server soru etiketine dayanıyor olsa da, yaklaşımlarınızın hiçbiri indeks kullanmayın. Büyük bir masa için bu büyük bir anlaşma olabilir. 7 gün önce tarihi almak için 'DATEADD()' işlevini kullanmak en iyisidir, 'WHERE DateRegistered> = DATEADD (gün, 7, GETDATE()) '. Ayrıca, GETDATE() 'nin zaman döndürdüğünden de haberdar olmanız gerekir, bu nedenle geçerli tarih + saatten 7 gün sonra. Bütün günü düşünmek istiyorsanız, "datetime zeminine" bakın. Aşağıdaki gibi bir şey kullanın: 'WHERE DateRegistered> = CONVERT (tarih, DATEADD (gün, 7, GETDATE()))' veya datetime istediğiniz başka bir yol. –

0

Tarih "YYYY-AA-dd" biçiminde olmalıdır.

SELECT 
    StudentID, DateRegistered 
FROM 
    StudentTable 
WHERE 
    DateDiff(day, DateRegistered, '" & DateTime.Now.ToString('yyyy-MM-dd') & "') <= 7 
+0

sorgunuz bir indeks kullanmaz ve taramayı gerçekleştirir. Küçük tablolar için bir fark yaratmayacak, ancak masa büyüdükçe fark edeceksiniz. –

+0

İşaret ettiğin için, tarihin doğru biçimde olduğundan emin olmak için biçimlendirilmiş tarihi ekledim, op indeksleme veya tablo boyutuyla ilgili hiçbir şey söylemedim, bu yüzden dışarıda bıraktım. – lobo

+1

İndeks sorununu işaret ettim, çünkü bu basit bir hata oluşturuyor ve gerçekten de sorgu çalıştırma süresinde bir fark yaratacaktır. "WHERE" maddesini her yazdığınızda bir dizinin nasıl çarpılacağını düşünmelisiniz. "DateRegistered" üzerinde bir dizin varsa, kullanılamaz, çünkü bunu DATEDIFF() 'işlevine koyarsınız. Şöyle yazdığınızda: 'WHERE DateRegistered> = DATEADD (gün, 7, GETDATE())' DateRegistered'i değişiklik olmadan kullanırsınız ve bir indeks kullanılabilir. –

0
cmd = "SELECT StudentID, DateRegistered 
FROM StudentTable 
WHERE DateRegistered between @startdate and @enddate", connectionstring) 

cmd.parameters.addwithvalue("@StartDate",today.date.subtract(timespan.fromdays(7))) 
cmd.parameters.addwithvalue("@EndDate",today) 
+0

Bu bir dizin kullanacaktır. Bununla birlikte, "BETWEEN" i kullanmayı hiç tercih etmiyorum, çok belirsiz görünüyor, kullanacağız '> = ve <=' or '> ve <'. Sadece durum için uygun olanı kullanıyorum ve açık: "DateRegistered> = @startdate ve DateRegistered <= @ enddate" veya "DateRegistered> @startdate ve DateRegistered <@ enddate" –

İlgili konular