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
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
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.
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. –
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
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. –
İş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
İ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. –
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)
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" –
[Bu] (http://stackoverflow.com/questions/17717515/how-to-query-for-todays-date-and-7-days-before-data) – ArchLicher
yardımcı olabilir Onun Doğru Sorgunuz iyi çalışacaktır. ancak tüm önceki kayıtları –
döndürecek, evet 712'nin altındaki tüm kayıtları görüntülemek istiyorum – silentstorm21