【问题标题】:why this MySQL SELECT doesn't include the right dates?为什么这个 MySQL SELECT 不包括正确的日期?
【发布时间】:2012-10-24 00:26:11
【问题描述】:

主要问题是,我存储在数据库 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 的输出 ....

【问题讨论】:

    标签: mysql date datetime select conditional-statements


    【解决方案1】:

    不要对日期/时间值使用字符串操作。 MySQL 有一个huge set of functions 用于日期/时间操作。试试看

    GROUP BY DATE(datetime_view)
    

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

    至于您的plus one day,请考虑比较是如何完成的:在日期/时间比较中使用纯日期值时,会附加一个隐含的00:00:00 时间值,例如所有日期的时间都是“午夜”。

    【讨论】:

      【解决方案2】:

      我认为最好使用DATE(datetime_view)来缩短时间而不是LEFT(datetime_view,10),同样在where条件下:

      DATE(datetime_view) <= '2012-11-03'
      

      【讨论】:

        猜你喜欢
        • 2011-06-19
        • 1970-01-01
        • 2014-03-20
        • 1970-01-01
        • 2023-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多