2012-10-30 47 views
3

我想从MySQL服务器的条目,其中日期> date_begin and < date_end比较字符串,日期与MySQL查询另一个字符串最新

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

的日期格式(如串/ VARCHAR)在MySQL表,并在文本框中会DD.MM.YYYY

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

(PHP代码)

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

结果将是完全随机的。

我知道为什么发生这样的问题是:我怎么能比较这得到正确的结果?

谢谢大家谁可以帮助

UPDATE:

现在我已经tryed这个解决方案,但它也不起作用。

$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'(德语中的文章)中,值为具有相同格式(“05.06.2005”)的VARCHAR's。

+2

为什么日期为varchar?为什么不是时间戳或日期时间? –

+0

将日期保留为字符串,然后将其作为日期进行处理意味着您会创建额外的编码开销,服务器上的额外负载,在服务器上使用额外的磁盘空间,引入具有错误格式的'日期'的可能性,以及破坏SQL引擎使用索引搜索该字段的能力。 * [我不能过分强调这一点] *:将数据存储在正确的数据类型中,不要存储字符串并将其“即时”转换;你正在走向一个受到伤害,低效率和调试地狱的世界。 – MatBailie

+0

它不是我的mysql服务器,如果我有能力将数据类型更改为“日期”,我将提供支持。我只是必须为现有的网络应用程序添加过滤功能的人。但无论如何感谢 – Ace

回答

9

始终比较日期与日期,整数与整数等

用MySQL,你可以使用str_to_date功能来指定字符串日期是如何被处理。

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

例如如果你的日期列被称为“指明MyDate”: -

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

并始终确保你从用户验证任何字符串输入,以避免SQL注入攻击。

编辑:正如德姆指出的那样,这是次优的,因为日期值应该作为日期值存储在数据库中。

+0

我会试试这个。这是STR_TO_DATE(日期,'%m /%d /%Y')一个有效的MYSQL函数吗? – Ace

+0

@Ace:是的。看到我粘贴到答案的链接。 – davek

+0

@Ace:你会把你的“$ dateBegin”代替“2004年4月31日”等 – davek

1

可以使用

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

问题是MYSQL无法将日期作为字符串进行比较。 – Ace