2011年12月1日 星期四

SQL 語法裡,篩選日期的寫法 -C#

string currentyear = DateTime.Now.Year.ToString();
string tempmonth = DateTime.Now.Month.ToString();
string currentmonth = (tempmonth.Length == 1 ? "0" + tempmonth.Substring(tempmonth.Length - 1, 1) : tempmonth.Substring(tempmonth.Length - 2, 2));
string tempday = DateTime.Now.Day.ToString();
string currentday = tempday.Length == 1 ? "0" + tempday.Substring(tempday.Length - 1, 1) : tempday.Substring(tempday.Length - 2, 2);

string temp =( Convert.ToInt32(tempday) + 1).ToString();
        string temptomo = temp.Length == 1 ? "0" + temp.Substring(temp.Length - 1, 1) : temp.Substring(temp.Length - 2, 2);
     
        string checkToday = currentyear + "-" + currentmonth + "-" + currentday;
        string checkTomo = currentyear + "-" + currentmonth + "-" + temptomo;
"SELECT * FROM [xxx] WHERE [DateTime] >= ""+ checkToday+"" AND < '"+checkTomo+"' ";


------------------------以下引述自 Allen Kuo大大----------------------------------

若SQL Server裡的 table 裡有一個日期欄位,只會放日期,那麼您可以寫成
SELECT .... FROM xxx WHERE xxx='2008/1/15'SELECT .... FROM xxx WHERE xxx BETWEEN '2008/1/15' AND '2008/1/20'
若日期欄位有包含時間, 由於時間可能值為 2008/1/15 23:59:59.50 如果您想找 2008/1/15 這一天裡的所有記錄(不拘時間), 卻將篩選條件寫成
SELECT .... FROM xxx WHERE xxx='2008/1/15' -->會找不到符合的記錄
SELECT .... FROM xxx WHERE xxx BETWEEN '2008/1/15' AND '2008/1/16' -->會連 2008/1/16 的記錄也被找到
SELECT .... FROM xxx WHERE xxx >= '2008/1/15' AND xxx<= '2008/1/15 23:59:59' -->若記錄值是2008/1/15 23:59:59.50 ,會找不到
因此,可以寫成
SELECT .... FROM xxx WHERE xxx >= '2008/1/15' AND xxx < '2008/1/16'
就沒什麼問題了

---------------------------------------------------------------------------------------

沒有留言:

張貼留言