我正在尝试从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”)。
答案 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 . "'";