我计划选择多个数据库表。
问题在于我希望当前日期等于当前日期,只是它的类型为varchar
,我无法与CURDATE ()
进行直接比较...有没有办法将当前日期与字符串类型进行比较?
代码:
select records.date , records.hour, records.Temp, records.Hum, sensors.idSensor, sensors.idLocalization
from records, sensors
where records.idSensor=sensors.idSensor
and records.date = curdade() // Here is where I wanted to make the comparison date
order by records.date desc;
------------------编辑(已解决)------------------------- -
谢谢大家的帮助。
我用curdade切换了CURDATE。
他做了正确的比较。
答案 0 :(得分:1)
将curdate()
转换为适当格式的字符串。类似的东西:
select r.date, r.hour, r.Temp, r.Hum, s.idSensor, s.idLocalization
from records r join
sensors s
on r.idSensor = s.idSensor
where r.date = date_format(curdate(), '%Y-%m-%d') // Here is where I wanted to make the comparison date
order by r.date desc;
您需要为date
列使用适当的格式。我只使用了“正确”格式,即将日期表示为字符串时最好使用的ISO标准日期格式。您可以阅读documentation中的格式。并且,最好将当前日期转换为正确的格式,而不是将字符串转换为日期。通过将函数放在比较的“常量”部分,MySQL仍然可以利用date
上的索引。
答案 1 :(得分:1)
试试这个。它可能会奏效。但这是一个与日期最新的数据类型比较,而不是字符串到字符串的比较。
select STR_TO_DATE(records.date, '%Y-%m-%d') AS date , records.hour, records.Temp, records.Hum, sensors.idSensor, sensors.idLocalization
from records, sensors
where records.idSensor=sensors.idSensor
and date = curdate() // Here is where I wanted to make the comparison date
order by date desc;