选择一段时间内的数据

时间:2012-05-30 09:43:12

标签: mysql sql datetime

我想检索过去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

但如果我在新月进入,它就无效。

你能帮我吗?

非常感谢

4 个答案:

答案 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小时内的数据”,但您没有存储时间,只是日期。因此,您今天只能从 中检索数据

  • 仅提取今天的记录:当您在H00:00:01处提取数据时,可能会出现边界条件。由于您没有存储时间值,因此您将从昨天开始丢失数据,这很可能意味着所有数据
  • 当提取今天和昨天的记录时:当您在H23:59:59处提取数据时,可能会出现边界条件。由于您没有存储时间值,因此您将从2天( - 1秒)提取数据。

总之,在表格中添加时间值。最好一列包含DATETIMETIMESTAMP数据类型(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_WSSTR_TO_DATE()函数:

STR_TO_DATE(CONCAT_WS('-', u.Day, u.Month, u.Year, '00', '00', '00'), '%d-%m-%Y-%H-%i-%s')

连接字符串中有零 - 只要将这些列添加到表中,就可以将其替换为u.Houru.Minu.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)