4

如果我想在某个日期范围内获得 total_consumption,我该怎么做?

我以为我可以这样做:

SELECT id, SUM(consumption) 
FROM consumption_info 
WHERE date_time BETWEEN 2013-09-15 AND 2013-09-16 
GROUP BY id;

但是这会返回:空集,2 个警告(0.00 秒)

---------------------------------------
id | consumption |  date_time          |        
=======================================|
1  |      5      | 2013-09-15 21:35:03 |
2  |      5      | 2013-09-15 24:35:03 |
3  |      7      | 2013-09-16 11:25:23 |
4  |      3      | 2013-09-16 20:15:23 |
----------------------------------------

有什么想法我在这里做错了吗?

提前致谢

4

3 回答 3

5

您缺少日期字符串周围的引号: WHERE 子句实际上应该写为...

BETWEEN '2013-09-15' AND '2013-09-16'

具有讽刺意味的是,这2013-09-15 一个有效的 SQL 表达式——它的意思是2013 minus 09 minus 15。显然,相应的结果之间没有日期。因此一个空集作为回报

然而,这里可能还有另一个更微妙的错误:你可能应该使用这个子句......

BETWEEN '2013-09-15 00:00:00' AND '2013-09-16 23:59:59'

... 反而。如果不明确设置时间,它将在两个日期都设置为“00:00:00”(因为DATETIME此处比较了值)。

虽然对于开始日期来说显然是可以的,但对于结束日期来说却不是这样——当然,除非排除当天任何时间的所有记录,但午夜实际上是理想的结果。

于 2013-09-16T22:17:06.607 回答
1

比较日期函数时最好使用 CAST。

SELECT id, SUM(consumption) 
FROM consumption_info 
WHERE date_time 
    BETWEEN CAST('2013-09-15' AS DATETIME) 
    AND CAST('2013-09-16' AS DATETIME) 
GROUP BY id;
于 2013-09-16T22:21:06.790 回答
1
SELECT SUM(consumption) 
FROM consumption_info 
WHERE date_time >= 2013-09-15 AND date_time <= 2013-09-16;

或者

SELECT SUM(consumption) 
FROM consumption_info 
WHERE date_time BETWEEN 2013-09-15 AND 2013-09-16;
于 2017-06-16T13:26:45.823 回答