字符串日期比较C#

时间:2012-08-16 14:23:52

标签: c# mysql

我有一个从MySQL数据库中提取日期的应用程序(字符串格式:01-jan-2000)。我需要将这些数据与TextBox中输入的日期进行比较。

这是我到目前为止所做的:

String query = "select * from tb_demographic_data where date_of_birth LIKE '%" +
       txb_startDate.Text + "' OR (str_to_date(date_of_birth,'%d,%b,%Y') <= 
       str_to_date('"+txb_startDate.Text+"','%d,%b,%Y'))

当我运行查询时,我没有得到任何结果。我的sql代码没有错。我认为当我将字符串更改为str_to_date()的日期时会发生错误。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:1)

不要对日期进行字符串比较。将数据库中的列更改为日期,并使用参数化语句或类似语句更新查询以接受日期值。

答案 1 :(得分:0)

看起来你的日期格式有误...... '%d,%b,%Y'说分隔符是逗号。我想你想要'%d-%b-%Y'

答案 2 :(得分:0)

正如Nikhil指出的那样,让用户在日期/日历/时钟控件中输入日期通常是一个更好的选择。另外,我强烈建议不要从文本框中获取用户输入,只需将其粘贴到SQL字符串中即可。这会导致SQL injection

我建议您使用上述推荐控件之一让用户指定特定的DateTimeconvert the data in your text box to a DateTime object。假设您使用DbCommand个对象来运行查询,则可以使用参数化查询并将DateTime作为参数传递,而不是直接将其放入命令中。您的SQL可能如下所示:

select * from tb_demographic_data
where date_of_birth <= @startDate

然后,您必须向DbParameter DbCommand ParameterName "@startDate" ValueDateTime对象添加{{1}}

答案 3 :(得分:0)

我明白了。我敢肯定它不是最有效的方法,但我对此很新。这是:我只是将两个字符串解析为日期并计算它们之间的日期差异。如果答案是肯定的,那么第一个日期在第二个日期之前,反之亦然

select * from tb_demographic_data 
where date_of_birth 
    LIKE '%" + txb_startDate.Text + "' 
    OR (datediff(str_to_date('" + txb_startDate.Text + "', 
                             '%d-%b-%Y'), 
                 str_to_date(date_of_birth,
                             '%d-%b-%Y'))>=0)