我想检索过去24小时内的数据,而不是今天的日期 - 1天。
问题是我的表中没有日期时间字段,但日期分为3个部分(日/月/年)
我试过了:
select *
from user u
Where DAYOFMONTH (CURDATE () - INTERVAL 1 day) - u.Day <= 1
and MONTH (CURDATE ()) - = 0 u.Month
and YEAR (CURDATE ()) - = 0 u.Year
但如果我在新月进入,它就无效。
你能帮我吗?
非常感谢
答案 0 :(得分:2)
您可以格式化字段中的真实日期:DATE(CONCAT(u.Year, '-', u.Month, '-', u.Day))
;然后你可以对它进行常规日期操作(例如减去INTERVAL 1 DAY
)
答案 1 :(得分:2)
使用iso格式,您可以使用convert来获取日期时间(tsql)
类似的东西(未经测试)
SELECT * from user u
where DATEADD(day,-1,GETDATE()) < convert(datetime, u.Year + u.Month + u.Day )
答案 2 :(得分:2)
我希望这个问题可以解决它。希望你,你,你,你。你是好的。
select * from user u Where
STR_TO_DATE(CONCAT(u.Month,'-',u.Day,'-',u.Year), '%m-%d-%Y') = date_add(curdate() , INTERVAL -2 DAY)
答案 3 :(得分:1)
首先,这种计算的结果将不准确。您想“检索过去24小时内的数据”,但您没有存储时间,只是日期。因此,您今天只能从 或中检索数据:
总之,在表格中添加时间值。最好一列包含DATETIME
或TIMESTAMP
数据类型(the difference is in range only)。
回到你的问题。基本上,你想要做的是:
/*
select * from table
where date >= now - 1 day;
*/
如何计算now - 1 day
?使用DATE_SUB()
函数:
DATE_SUB(NOW(), INTERVAL 1 DAY)
如何从列中创建日期?使用CONCAT_WS
和STR_TO_DATE()
函数:
STR_TO_DATE(CONCAT_WS('-', u.Day, u.Month, u.Year, '00', '00', '00'), '%d-%m-%Y-%H-%i-%s')
连接字符串中有零 - 只要将这些列添加到表中,就可以将其替换为u.Hour
,u.Min
,u.Sec
。但正如我之前所说,使用DATETIME
列可以获得最佳性能。
汇总:
SELECT *
FROM users u
WHERE STR_TO_DATE(CONCAT_WS('-', u.Day, u.Month, u.Year, '00', '00', '00'), '%d-%m-%Y-%H-%i-%s') >= DATE_SUB(NOW(), INTERVAL 1 DAY)