字符串日期比较C#

问题描述:

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

这是我到目前为止有:

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()的日期。谁能帮忙?

+0

尝试输出mysql的日期文本框和检查,如果格式是一样的... – perilbrain 2012-08-16 14:28:15

+0

这看起来像一个SQL注入等待发生。 – Magnus 2012-08-16 14:32:44

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

+0

感谢您的快速回答。但是现在查询只是提出了数据库中的所有字段。它仍然不能识别比较 – 2012-08-16 14:38:38

+0

在这种情况下,也许你可以在发送到数据库之前发送SQL字符串。你有没有写过一个SQL语句,你可以直接对数据库运行(即不通过代码),做你想做的事情?为什么你的数据库中的日期是一个字符串? :) – Chris 2012-08-16 14:46:49

+0

我会单独在mysql中测试它,并尝试将该字段更改为DateTime。感谢您的反馈:) – 2012-08-16 14:55:05

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

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

我建议您使用上述建议的控件之一来让用户指定一个特定的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"@startDate"一个ParameterName和你DateTime对象的Value

我想通了。我相信它不是最有效的方法,但我对此很新。这里是:我只是将两个字符串解析为日期并计算它们之间的日期差异。如果答案是肯定的,则第一个日期到来之前,第二,反之亦然

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) 
+0

不要通过连接不可信(读取:用户提供的)字符串来构建sql查询。使用参数化查询并添加用户输入作为参数。 – bmm6o 2012-08-29 17:33:44