Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL查询两个日期之间的数据,表中没有日期列_Mysql_Date_Date Difference - Fatal编程技术网

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

MYSQL查询两个日期之间的数据,表中没有日期列,mysql,date,date-difference,Mysql,Date,Date Difference,我有一张四列的桌子 DAY |MONTH | YEAR | SUM_FILE_SIZE ---------------------------------------- 对于“2013年7月1日”到“2014年9月17日”之间的日期范围,如何从该表中选择总和文件大小 我尝试过这个查询,但它给出的数据不正确 select day, month, year, sum_file_size from bermuda_stat.fileandcite_daily where day between 1

我有一张四列的桌子

 DAY |MONTH | YEAR | SUM_FILE_SIZE
----------------------------------------
对于“2013年7月1日”到“2014年9月17日”之间的日期范围,如何从该表中选择总和文件大小

我尝试过这个查询,但它给出的数据不正确

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.
如何获得这两个日期范围之间的所有总和文件大小

请注意,它不包括除日期介于1和17之间以外的所有日期,同样,它也不包括除日期介于7和9之间的任何月份以外的所有月份


谢谢。

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

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

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

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

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

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

请参阅此有用函数列表。您应该注意的第一个问题是MAKEDATE()函数。如果你给它一个常数1,它可以用来得到给定年份的第一天。例如,这将是:

SELECT MAKEDATE(year, 1) AS firstDayOfYear
FROM myTable
现在,您可以使用ADDDATE()函数添加其余信息。您可以这样添加日期:

SELECT ADDDATE(MAKEDATE(year, 1), INTERVAL (day - 1) DAY) AS dayAndYear
FROM myTable;
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';
我之所以使用(day-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 ADDDATE(MAKEDATE(year, 1), INTERVAL (day - 1) DAY) AS dayAndYear
FROM myTable;
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';
这里有一个例子。我把每个部分都放在那里了,这样你就可以一步一步地看到分解的过程


这可能也会有帮助。

请查看此有用函数列表。您应该注意的第一个问题是MAKEDATE()函数。如果你给它一个常数1,它可以用来得到给定年份的第一天。例如,这将是:

SELECT MAKEDATE(year, 1) AS firstDayOfYear
FROM myTable
现在,您可以使用ADDDATE()函数添加其余信息。您可以这样添加日期:

SELECT ADDDATE(MAKEDATE(year, 1), INTERVAL (day - 1) DAY) AS dayAndYear
FROM myTable;
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';
我之所以使用(day-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 ADDDATE(MAKEDATE(year, 1), INTERVAL (day - 1) DAY) AS dayAndYear
FROM myTable;
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';
这里有一个例子。我把每个部分都放在那里了,这样你就可以一步一步地看到分解的过程


这可能也有帮助。

试试这个,它对我有用

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

试试这个,它对我有用

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


可能的重复为什么不能将格式更改为具有日期列?这样做会容易得多。已经有人创建了这个表。我无法控制。现在就输入答案。请稍等。我理解更改表的困难,但如果没有实际的日期列,所有解决方案都会导致表扫描。此查询无法使用索引,性能将很差。您应该让开发人员知道这个折衷。可能的重复为什么您不能更改格式以有一个日期列?这样做会容易得多。已经有人创建了这个表。我无法控制。现在就输入答案。请稍等。我理解更改表的困难,但如果没有实际的日期列,所有解决方案都会导致表扫描。此查询无法使用索引,性能将很差。你应该让开发人员意识到这个权衡。@Rudie这是讽刺吗?我从来没有见过这样的功能。不是讽刺,而是愿望。函数不存在,这就是为什么我这么说
MAKEDATE(年,日)
是一个奇怪的函数。@Rudie同意。我以为有一个(年、月、日)函数,你会说我把这个答案复杂化了。我们只能做梦。@Rudie,这是讽刺吗?我从来没有见过这样的功能。不是讽刺,而是愿望。函数不存在,这就是为什么我这么说
MAKEDATE(年,日)
是一个奇怪的函数。@Rudie同意。我以为有一个(年、月、日)函数,你会说我把这个答案复杂化了。我们只能做梦。子查询不是必需的,是吗?是的,如果我们不想在结果集中显示列“mydate”,我们需要一个子查询。因为它不是我们表中的实际列。难道您不能
在x和y之间的位置(CONCAT(year,'-',month,'-',day)转换为日期吗
?不需要子查询,是吗?是的,如果我们不想在结果集中显示列“mydate”,我们需要子查询。因为它不是我们表中的实际列。难道您不能
在x和y之间的位置(CONCAT(年、'-',月、'-',日)转换为日期吗?