我有一个包含四列的表
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之间的任何月份以外的所有月份都不包括在内?
感谢。
答案 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'