2014-02-20 109 views
-2

以下查詢在2月和3月之間嘗試選擇記錄時不返回任何結果。在歐洲格式的兩個日期之間進行選擇

下面是我使用的查詢:

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM data WHERE CONVERT(VARCHAR(50),data,105) BETWEEN CONVERT(VARCHAR(50),'" + dateTimePicker1.Text + "',105) AND CONVERT(VARCHAR(50),'"+dateTimePicker3.Text+"',105)", conn); 
  • data的類型爲varchar(50),我想將其轉換爲DD-MM-yyyy格式
+1

不要拿轉換成'VARCHAR'日期,兩個日期比較之前轉換爲'DATETIME'。 – user2989408

+0

數據列是VARCHAR(50) – user3334406

+0

@ user2989408我不能unrestand你,你可以鍵入querry,你是什麼意思不轉換兩個日期? – user3334406

回答

1

你SQL應該是這樣的

SELECT * FROM data 
WHERE CONVERT(datetime, data, 105) >= CONVERT(datetime, '01-01-2014', 105) 
    AND CONVERT(datetime, data, 105) <= CONVERT(datetime, '01-31-2014', 105) 
+0

仍然dostst作品,當我想從01-02-2014選擇數據到01-03-2013它什麼也沒有顯示:( – user3334406

+0

兄弟,非常感謝你現在的作品,現在我想我會測試它,你只是忘了改變(VARCHAR(50),'「+ datetimepicker3.text +」',105)到(datetime,'「+ dateTimePicker3.Text +'',105) – user3334406

+0

很好用,我只是顯示了SQL可以轉換成C#相應。 – user2989408

0

我會使用date值fro米DatePicker一旦你轉換的一切Date SQL不會有比較MM-DD-YYYY至DD-MM-YYYY

SELECT * 
FROM MyTable 
WHERE CONVERT(DATE,MyStringDate,105) >= dateTimePicker1.Value.Date 
AND CONVERT(DATE,MyStringDate,105) <= dateTimePicker.Value.Date 
0

你是做了太多的轉換問題。 SQL將很難確定VARCHAR類型中的BETWEEN

相反的東西轉換成DATEDATETIME(取決於您的SQL Server版本和類型)

而且你應該使用參數化查詢,以避免SQL注入。

像這樣將工作做好:

using (var da = new SqlDataAdapter()) 
{ 
    da.SelectCommand.CommandText = 
     "SELECT * FROM data WHERE CONVERT(datetime, data, 105) >= @Date1 AND CONVERT(datetime, data, 105) <= @Date2"; 
    //Use the DateTimePicker's Value property here, not the Text Property 
    da.SelectCommand.Parameters.AddWithValue("@Date1", dateTimePicker1.Value); 
    da.SelectCommand.Parameters.AddWithValue("@Date2", dateTimePicker3.Value); 
    da.Fill(yourDataTable); //Or whatever you're doing 
} 
相關問題