0

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

这是我到目前为止所拥有的:

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

4 回答 4

1

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

于 2012-08-16T15:11:46.650 回答
0

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

我建议您要么使用上述推荐的控件之一让用户指定特定的控件DateTime,要么将文本框中的数据转换为DateTime对象。假设您使用DbCommand对象来运行查询,那么您可以使用参数化查询并将您的DateTime作为参数传递,而不是直接将其放入命令中。您的 SQL 可能如下所示:

select * from tb_demographic_data
where date_of_birth <= @startDate

然后,您必须将 a 添加DbParameter到您DbCommand的 a ParameterNameof"@startDate"和 aValue您的DateTime对象中。

于 2012-08-16T15:31:23.643 回答
0

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

于 2012-08-16T14:30:28.400 回答
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) 
于 2012-08-17T17:46:28.677 回答