The following query doesn't return any results when I try to select records between February and March.

Here is the query that I'm using :

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 is type VARCHAR(50) and i want to convert it to dd-MM-yyyy format
有帮助吗?

解决方案

Your SQL should be something like

 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)

其他提示

I would use date value from DatePicker Once you convert everything to Date SQL will not have problem of comparing mm-dd-yyyy to dd-mm-yyyy

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

You are doing too many conversions. SQL will have a hard time determining BETWEEN on VARCHAR types.

Instead convert things to DATE or DATETIME (depending on your SQL Server Version and type)

Also you should use parameterized queries to avoid SQL Injection.

Something like this would work well:

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
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top