0

主要问题是,我存储在数据库中datetime,而不是日期(我需要的)。好吧,那算了。

我每天存储数以千计的报告。

我需要在 10 点之前离开我的 datetime_view(以缩短时间),一切都很好。除了这个。我试图弄清楚为什么我必须在未来的一天加上条件?否则它不会搜索我想要的。

SELECT 
    LEFT(datetime_view,10),
    count(type) 
        FROM reports 
            WHERE 
        type IN (1,2,5) 
            AND 
        datetime_view>='2012-10-28' 
            AND
        datetime_view<='2012-11-04' 
            group by LEFT(datetime_view,10);

你可以看到我必须从未来寻找。为什么??

它给了我从 28.10 到 3.11 的输出 ....

4

2 回答 2

1

不要对日期/时间值使用字符串操作。MySQL 有大量用于日期/时间操作的函数。尝试

GROUP BY DATE(datetime_view)

相反,它将仅提取日期时间字段的日期部分。您的字符串操作不符合 y10k 标准。使用 date() 函数是。

至于你的plus one day,考虑比较是如何完成的:一个普通的日期值,当用于日期/时间比较时,有一个隐含的00:00:00时间值,例如所有日期都有一个“午夜”的时间。

于 2012-11-03T15:33:10.017 回答
1

我认为最好在 where 条件下使用DATE(datetime_view)to cut time 而不是LEFT(datetime_view,10)

DATE(datetime_view) <= '2012-11-03'
于 2012-11-03T15:33:28.363 回答