2017-10-07 506 views
0

我想显示两个范围之间的行。这两个范围将是日期。一列存储的日期在“2017年8月10日/上午05点” 格式的字符串为了我使用下面的查询来比较值:MySQL:无法正确比较字符串值作为日期

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

你为什么不只是使用'DATE'或'DATETIME'数据类型? –

+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' 
+0

谢谢。你确实指向了正确的方向,但是我必须将STR_TO_DATE中的格式更改为%d-%m-%Y。 –