MYSQL查询两个日期之间的数据,表中没有日期列

时间:2014-11-01 18:19:38

标签: mysql date date-difference

我有一个包含四列的表

 DAY |MONTH | YEAR | SUM_FILE_SIZE
----------------------------------------

如何从“此表”中选择sum_file_size,以获取“2013年第1个月7年”至“2014年9月9日”之间的日期范围?

我已经尝试过这个查询并且提供的数据不正确。

select day, month, year, sum_file_size
from bermuda_stat.fileandcite_daily
where day between 1 and 17 and month between 7 and 9 and year between 2013 and 2014
group by day, month, year
order by year, month, day.

如何在这两个日期范围之间获得所有sum_file_size?

请注意,除了1到17之间的任何日期以外的所有日子都不包括在内,除了7到9之间的任何月份以外的所有月份都不包括在内?

感谢。

3 个答案:

答案 0 :(得分:2)

我只是将日期转换为YYYYMMDD形式的数字并将其用于比较:

where year*10000 + month*100 + day between 20130701 and 20140917

您可以使用字符串执行类似操作,甚至将它们转换为日期,但数字方法应该足够了。

答案 1 :(得分:1)

请参阅此有用的date and time功能列表。您应注意的第一个(对于此问题)是MAKEDATE()函数。如果你给它一个常数1,它可以用来获得给定年份的第一天。所以,对你来说,这将是:

SELECT MAKEDATE(year, 1) AS firstDayOfYear
FROM myTable

现在,您可以使用ADDDATE()函数添加其余信息。您可以像这样添加日期:

SELECT ADDDATE(MAKEDATE(year, 1), INTERVAL (day - 1) DAY) AS dayAndYear
FROM myTable;

我使用(第1天)的原因是因为我们已经从makedate获得了1天。所以01-01 + 3给你01-04这是不正确的。

月份部分以相同的方式工作,建立在最后一个日期。

SELECT ADDDATE(ADDDATE(MAKEDATE(year, 1), INTERVAL (day - 1) DAY), INTERVAL (month - 1) MONTH) AS fullDate
FROM myTable

现在,您可以将其实现到where语句中。由于您知道要限制的日期,因此您可以将其视为日期。最终查询如下所示:

SELECT SUM(filesize)
FROM myTable
WHERE (ADDDATE(ADDDATE(MAKEDATE(year, 1), INTERVAL (day - 1) DAY), INTERVAL (month - 1) MONTH))
  BETWEEN '2013-07-01' AND '2014-09-17';

这是一个SQL Fiddle示例。我把每个部分留在那里,所以你可以看到细分如何逐步发挥作用。

question也可能有所帮助。

答案 2 :(得分:1)

试试这个,它对我有用

SELECT `SUM_FILE_SIZE` 
FROM mytable
WHERE cast( concat(`year`,'-',`month`,'-',`day` ) AS DATE ) BETWEEN '2013-07-01' AND '2014-09-17'