字符串日期比较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()
的日期。谁能帮忙?
它看起来像你的日期格式是错误的... '%d,%b,%Y'
是说分隔符是逗号。我会想像你想要的东西像'%d-%b-%Y'
。
感谢您的快速回答。但是现在查询只是提出了数据库中的所有字段。它仍然不能识别比较 – 2012-08-16 14:38:38
在这种情况下,也许你可以在发送到数据库之前发送SQL字符串。你有没有写过一个SQL语句,你可以直接对数据库运行(即不通过代码),做你想做的事情?为什么你的数据库中的日期是一个字符串? :) – Chris 2012-08-16 14:46:49
我会单独在mysql中测试它,并尝试将该字段更改为DateTime。感谢您的反馈:) – 2012-08-16 14:55:05
不要做日期的字符串比较。将数据库中的列更改为日期,并使用参数化语句或类似语句更新查询以接受日期值。
正如Nikhil指出的,让用户在日期/日历/时钟控件中输入日期通常是更好的选择。另外,我强烈建议不要从文本框中获取用户输入,而只是将其粘贴到SQL字符串中。这导致SQLinjection。
我建议您使用上述建议的控件之一来让用户指定一个特定的DateTime
或convert 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)
不要通过连接不可信(读取:用户提供的)字符串来构建sql查询。使用参数化查询并添加用户输入作为参数。 – bmm6o 2012-08-29 17:33:44
尝试输出mysql的日期文本框和检查,如果格式是一样的... – perilbrain 2012-08-16 14:28:15
这看起来像一个SQL注入等待发生。 – Magnus 2012-08-16 14:32:44