MySQL:无法正确比较字符串值作为日期

时间:2017-10-07 20:14:05

标签: mysql string date

我正在尝试显示介于两个范围之间的行。这两个范围将是日期。其中一列将日期作为字符串存储,格式为" 8-10-2017 / 05:00 AM" 为了比较我使用以下查询的值:

SELECT * FROM `Game` WHERE (Home_School_Name = 'Paarl Boys' OR Away_School_Name = 'Paarl Boys') && Status = 'NOT STARTED' && STR_TO_DATE(LEFT(Start_Time,LOCATE(' ',Start_Time)),'%m-%d-%Y') BETWEEN '2017-8-10' AND '2017-15-10'  

现在有两个游戏应该在结果中返回。 8-10-2017,9-10-2017。当我发送范围为2017-1-10和2017-8-10时,它显示第一个游戏。当我尝试2017-8-10和2017-8-12。它显示了两个游戏。但是当我超过12时,它会停止返回它们。 我知道我传递的日期格式有问题。但我无法弄明白。我也看到了类似的问题,但没有一个对我有用。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您应该将日期/时间存储为datetime,而不是字符串。使用错误的数据类型只会使后续工作变得更加困难。

MySQL通常采用ISO标准格式的日期常量,YYYY-MM-DD,所以试试这个:

SELECT g.*
FROM `Game` g
WHERE 'Paarl Boys' IN (Home_School_Name, Away_School_Name = 'Paarl Boys') AND
       g.Status = 'NOT STARTED' &
       STR_TO_DATE(LEFT(Start_Time, LOCATE(' ', Start_Time)), '%d-%m-%Y') BETWEEN '2017-10-08' AND '2017-10-15'