C# 以欧洲格式在两个日期之间选择
当我尝试选择2月和3月之间的记录时,以下查询不会返回任何结果 以下是我正在使用的查询:C# 以欧洲格式在两个日期之间选择,c#,sql,sql-server,date,between,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.Te
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);
是VARCHAR(50)类型,我想将其转换为dd-MM-yyyy格式data
- 您的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)
从数据中选择*
其中CONVERT(datetime,data,105)>=CONVERT(datetime,'01-01-2014',105)
和CONVERT(datetime,data,105)我将使用DatePicker
中的date
值,一旦将所有内容转换为date
SQL将不会有比较mm-dd-yyyyy和dd-mm-yyyy的问题
SELECT *
FROM MyTable
WHERE CONVERT(DATE,MyStringDate,105) >= dateTimePicker1.Value.Date
AND CONVERT(DATE,MyStringDate,105) <= dateTimePicker.Value.Date
选择*
从MyTable
其中CONVERT(DATE,MyStringDate,105)>=dateTimePicker1.Value.DATE
和CONVERT(DATE,MyStringDate,105)您正在进行太多的转换。SQL很难在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
}
使用(var da=new SqlDataAdapter())
{
da.SelectCommand.CommandText=
“从数据中选择*,其中CONVERT(datetime,data,105)=@Date1和CONVERT(datetime,data,105)不比较转换为VARCHAR
的日期,在比较之前将两个日期转换为datetime
。数据列为VARCHAR(50)@用户2989408我无法理解你,你能键入查询吗?如果不转换两个日期,你是什么意思?@VladimirOselsky其dd mm yyyy(24-2-2013)向我们展示一些示例数据,并且您正在将日期转换为VARCHAR
,要进行比较,您需要将它们转换为日期。仍然不起作用,当我想要选择2014年2月1日至2013年3月1日的数据时,它什么也没有显示:(兄弟,非常感谢您,现在它起作用了,我想我会对它进行更多的测试,您只是忘记了更改(VARCHAR(50),”+datetimepicker3.text+”,105)到(datetime,“+datetimepicker3.text+”,105)很高兴它能工作。我只是展示了SQL,您可以将它相应地转换为C。@user3334406我强烈建议您也使用参数化查询。