比较SQL中的日期会返回错误的记录

时间:2014-09-05 10:50:08

标签: sql database phpmyadmin

我正在尝试在用户输入的两个特定日期之间找到数据库中的日期。类似的东西:

选择日期FROM表WHERE日期> = dateFrom AND日期< = dateTO

我有下表:

enter image description here

我错误地将日期保存为VARCHAR,现在我必须执行所有str_to_date和date_format,因为我正在使用phpMyAdmin。我以某种方式做到了但是我使用这个查询面临这个奇怪的问题:

SELECT date_format(str_to_date(data,'%d/%m/%Y'),'%d/%m/%Y') AS data FROM montaggio WHERE data>=date_format(str_to_date('29/08/2014','%d/%m/%Y'),'%d/%m/%Y')

查询只返回19/08/2014的日期,我希望它返回01/09/2014。另一方面,如果它输入查询

SELECT date_format(str_to_date(data,'%d/%m/%Y'),'%d/%m/%Y') AS data FROM montaggio WHERE data>=date_format(str_to_date('29/08/2014','%d/%m/%Y'),'%d/%m/%Y') AND data<=date_format(str_to_date('05/09/2014','%d/%m/%Y'),'%d/%m/%Y')

查询不返回任何内容。

我正在使用phpMyAdmin。 我在这里失踪了什么?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

你似乎有点困惑。日期上的所有操作都应在 date 数据类型上完成。没有必要将东西转换回字符串:

SELECT data
FROM montaggio
WHERE str_to_date(data, '%d/%m/%Y') >= str_to_date('29/08/2014', '%d/%m/%Y')

您似乎理解真正的解决方案,即使用正确的类型在数据库中存储日期/时间。如果你必须使用字符串作为日期,那么总是将它们存储为YYYY-MM-DD,这样比较和排序就能正常工作。