当我尝试在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格式答案 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
。
而是将内容转换为DATE
或DATETIME
(取决于您的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
}