2015-08-17 35 views
0

我想在aspx網站上的特定日期之間顯示我DB中的所有行和列。但是,日期不會以日期或日期時間格式記錄。它似乎不可能將它們轉換爲日期格式。我嘗試這樣做;SQL在特定日期之間顯示所有不在DateTime格式中的特定日期的變量

public DataTable DisplayRecord() 
     { 
      var reqID = Request.QueryString["MyId"].ToString(); 

      //Date parsing 

      String[] ids = reqID.Split('-'); 
      String date1 = ids[0]; 
      String date2 = ids[1]; 
      String provider = ids[2]; 

      SqlDataAdapter Adp = new SqlDataAdapter("SELECT * FROM flightLogs WHERE depDate_depTime=CONVERT(date,depDate_depTime,104) AND depDate_depTime BETWEEN CONVERT(date,'" + date1 + "',104)" + 
       " AND CONVERT(date,'" + date2 + "',104)", connection); 

      /*SqlDataAdapter Adp = new SqlDataAdapter("SELECT F.PNR, C.amount, F.provider, F.depDate_depTime FROM flightLogs F INNER JOIN companyLogs C ON F.PNR = C.PNR"+ 
       " WHERE F.depDate_depTime=CONVERT(date,F.depDate_depTime,104) AND F.depDate_depTime BETWEEN CONVERT(date,'" + date1 + "',104)" + 
       " AND CONVERT(date,'" + date2 + "',104) AND F.provider='" + provider + "' ORDER BY F.depDate_depTime ASC", connection);*/ 
      DataTable Dt = new DataTable(); 
      Adp.Fill(Dt); 
      FlightMonitor.DataSource = Dt; 
      FlightMonitor.DataBind(); 
      return Dt; 
     } 

,但我得到這個錯誤;

「從字符串中轉換日期和/或時間時轉換失敗。」

此外,我的數據庫中的數據也是這樣顯示的;

origin destination deptDate_depTime  PNR flightno provider 
KBP AMS   18.09.2015 - 17:35:00 5RQZ43 PS712  Amadeus 
ATH FRA   10.07.2015 - 12:30:00 ZFY8XW PS716  PGS 
+0

您的數據庫日期時間格式 - 它是存儲爲VARCHAR?這是一個固定的格式? – Paddy

+0

是的,它被存儲爲一個varchar格式。 –

+0

爲什麼要將'DateTime'值保存爲字符串?你爲什麼不把它們保存在'datetime'或'datetime2'類型中? http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong-data-type.aspx –

回答

0

如您所見,將日期時間值存儲在varchar列中是一個壞主意。 如果您需要特定的格式,那麼您應該在將要向用戶顯示該值時轉換它。

反而使事情現在的工作,你可以在你的where子句從:

depDate_depTime=CONVERT(date,depDate_depTime,104) 

這樣:

depDate_depTime = convert(datetime, left(depDate_depTime, 10) + ' ' + right(depDate_depTime, 8), 104) 
+0

哪個值應該給@dt? –

+0

編輯我的答案 – Noxthron

相關問題