mysql在哪里按日期返回不正确的结果?
问题描述:
我有一个表是这样的: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。无论是否有问题?
答
你需要列和搜索字符串转换为日期类型:
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
答
现在你正在比较字符串与你的BETWEEN
条款,这基本上导致只比较日期的日期。你可以看到,所有返回的行已经和31
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
+0
谢谢你的评论:D – Asamoa 2014-10-31 04:18:52
转换/施放'match_formatted_date'到日期和使用适当的日期符号的范围界限。 – 2014-10-31 04:01:47
“注意:match_formatted_date是varchar,而不是日期时间,不管它是否是问题?”,是的......这将是一个问题。 – Mitch 2014-10-31 04:01:54
或者如果您不想将日期存储在相应的字段类型中,请以YYYY-MM-DD格式(或使用点代替破折号)保留日期。这将允许进行字符串比较。 – Cheery 2014-10-31 04:11:44