0

我有一个名为 schedules 的表,其中包含列日、月、年等。我需要的是在 $datefrom 和 $dateto 之间选择记录。这是我的代码不起作用:(

SELECT * FROM schedules WHERE CONCAT(year, month, day) BETWEEN $datefrom AND $dateto

我不确定这是否正确。请帮忙。

4

1 回答 1

1

就像 showdev 在评论中已经说过的那样,您必须将从函数返回的字符串CONCAT()转换为日期。但是请考虑,没有索引可以用于此。

我建议您在表中创建一个包含完整日期的附加列。我不知道您是否出于性能原因将日期分为 3 列,但请尝试一下,如果只有一列就足够了。通常它足够快(索引时)。

如果您不想这样做并且想要使用索引(如果它们存在于这 3 列中),则必须像这样编写查询:

SELECT * FROM schedules WHERE 
`year` BETWEEN YEAR($datefrom) AND YEAR($dateto)
AND `month` BETWEEN MONTH($datefrom) AND MONTH($dateto)
AND `day` BETWEEN DAY($datefrom) AND DAY($dateto)
于 2013-05-30T23:15:29.410 回答