在欧洲格式的两个日期之间选择
Posted
技术标签:
【中文标题】在欧洲格式的两个日期之间选择【英文标题】:Select between two dates in European Format 【发布时间】:2014-02-20 21:07:48 【问题描述】:当我尝试选择 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 格式
【问题讨论】:
不比较转换为VARCHAR
的日期,在比较之前将两个日期都转换为DATETIME
。
数据列是VARCHAR(50)
@user2989408 我无法理解你,你能输入查询吗?你的意思是不要转换两个日期?
@VladimirOselsky 其 dd-mm-yyyy (24-2-2013)
向我们展示一些示例数据,并且您正在将日期转换为VARCHAR
,以进行比较,您需要将它们转换为日期。
【参考方案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)
【讨论】:
仍然有效,当我想选择从 01-02-2014 到 01-03-2013 的数据时,它什么也没显示:( 兄弟,非常感谢你它现在可以工作了我想我会更多地测试它,你只是忘记将 (VARCHAR(50),'"+datetimepicker3.text+"',105) 更改为 (datetime , '" + dateTimePicker3.Text + "', 105) 很高兴它成功了。我只是展示了你可以相应地将其转换为 C# 的 SQL。 @user3334406 我强烈建议您也使用参数化查询。【参考方案2】:我将使用来自DatePicker
的date
值一旦将所有内容转换为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
【讨论】:
【参考方案3】:您的转化次数过多。 SQL 将很难在 VARCHAR
类型上确定 BETWEEN
。
改为将内容转换为 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
【讨论】:
以上是关于在欧洲格式的两个日期之间选择的主要内容,如果未能解决你的问题,请参考以下文章