2014-10-31 73 views
0

我有一个表是这样的:mysql在哪里按日期返回不正确的结果?

match_name match_formatted_date 
A vs B  28.10.2014 
b vs c  26.10.2014 
c vs d  18.10.2014 
d vs e  30.09.2014 
e vs f  27.09.2014 
g vs h  19.09.2014 
h vs j  28.08.2014 
x vs y  26.08.2014 
y vs z  07.08.2014 

的mysql:

SELECT `m`.* FROM `match` `m` 
WHERE (m.match_formatted_date BETWEEN "24.10.2014" AND "31.10.2014") 
ORDER BY `m`.`match_id` DESC 

但MySQL的返回值是这样的:

A vs B  28.10.2014 
b vs c  26.10.2014 
d vs e  30.09.2014 
e vs f  27.09.2014 
h vs j  28.08.2014 
x vs y  26.08.2014 

我只希望得到这样的:

A vs B  28.10.2014 
b vs c  26.10.2014 

注意:match_formatted_date是varchar,而不是datetime。无论是否有问题?

+0

转换/施放'match_formatted_date'到日期和使用适当的日期符号的范围界限。 – 2014-10-31 04:01:47

+0

“注意:match_formatted_date是varchar,而不是日期时间,不管它是否是问题?”,是的......这将是一个问题。 – Mitch 2014-10-31 04:01:54

+0

或者如果您不想将日期存储在相应的字段类型中,请以YYYY-MM-DD格式(或使用点代替破折号)保留日期。这将允许进行字符串比较。 – Cheery 2014-10-31 04:11:44

回答

2

你需要列和搜索字符串转换为日期类型:

SELECT `m`.* `match` `m` 
WHERE (str_to_date(m.match_formatted_date, '%d.%m.%Y') BETWEEN str_to_date("24.10.2014", '%d.%m.%Y') AND str_to_date("31.10.2014", '%d.%m.%Y')) 
ORDER BY `m`.`match_id` DESC 
+0

太快太过分了:))。你的代码完美运行。非常感谢:D – Asamoa 2014-10-31 04:17:56

0

现在你正在比较字符串与你的BETWEEN条款,这基本上导致只比较日期的日期。你可以看到,所有返回的行已经和31

使用天24

STR_TO_DATE将字符串转换为可以对被比较合适的日期值:

SELECT `m`.* 
FROM `match` `m` 
WHERE (STR_TO_DATE(m.match_formatted_date,'%d.%m.%Y') BETWEEN STR_TO_DATE('24.10.2014','%d.%m.%Y') AND STR_TO_DATE('31.10.2014','%d.%m.%Y') 
ORDER BY `m`.`match_id` DESC 

阅读有关,在这里:how to convert a string to date in mysql?

+0

谢谢你的评论:D – Asamoa 2014-10-31 04:18:52