将字符串日期与MySql查询中的另一个字符串日期进行比较

时间:2012-10-30 12:48:26

标签: php mysql sql date

我正在尝试从MySql服务器获取日期为> date_begin and < date_end

的条目

我的问题是表格列“date”设置为VARCHAR,我正在比较的字符串也直接来自<input type="text"/>

mysql表和文本框中的日期格式(作为字符串/ varchar)将为DD.MM.YYYY

我的问题是,如果我这样做

(php code)

 $query = "SELECT * FROM table WHERE date>='" . $dateBegin . "' AND date<='" . $dateEnd . "'";

结果将是完全随机的。

我知道为什么会这样,所以问题是:我怎样才能比较这个以获得正确的结果?

谢谢所有可以提供帮助的人

更新:

现在我尝试了这个解决方案,但它也不起作用。

$query = "SELECT * FROM artikel WHERE STR_TO_DATE(datum, '%d.%m.%Y')>=STR_TO_DATE('" . $_REQUEST['dateTo'] . "', '%d.%m.%Y')" . "' AND STR_TO_DATE(datum, '%d.%m.%Y')<=STR_TO_DATE('" . $_REQUEST['dateTo'] . "', '%d.%m.%Y')";

$_REQUEST['dateFrom']$_REQUEST['dateTo']来自2个文本框,输入是一个类似"05.06.2005"的字符串。

在“datum”(日语为日期)列的db-table“artikel”(文章德语)中,值为VARCHAR,格式相同(“05.06.2005”)。

2 个答案:

答案 0 :(得分:9)

始终将日期与日期,整数与整数等进行比较。

使用MySQL,您可以使用str_to_date函数指定字符串日期的处理方式。

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

e.g。如果您的日期列名为“mydate”: -

SELECT * from table
where STR_TO_DATE(mydate, '%m/%d/%Y') >= STR_TO_DATE('04/31/2004', '%m/%d/%Y')
...

始终确保您验证来自用户的任何字符串输入,以避免SQL注入攻击。

编辑:正如Dems指出的那样,这不是最理想的,因为日期值应该作为日期值存储在数据库中。

答案 1 :(得分:1)

你可以在

之间使用
"SELECT * FROM table WHERE date between'" . $dateBegin . " AND " . $dateEnd . "'";