在欧洲格式的两个日期之间选择

时间:2014-02-20 21:07:49

标签: c# sql sql-server date between

当我尝试在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格式

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

我会使用来自date的{​​{1}}值一旦将所有内容转换为DatePicker SQL就不会有将mm-dd-yyyy与dd-mm-yyyy进行比较的问题

Date

答案 2 :(得分:0)

您正在进行太多转换。 SQL将很难确定BETWEEN类型的VARCHAR

而是将内容转换为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
}
相关问题