我有一个名为scheduleles的表,其中包含日,月,年等列。我需要的是选择$ datefrom和$ dateto之间的记录。这是我的代码不起作用:(
SELECT * FROM schedules WHERE CONCAT(year, month, day) BETWEEN $datefrom AND $dateto
我不确定这是否正确。请帮忙。
答案 0 :(得分: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)