【问题标题】:Filter Dates in sql by months - php,sql按月份过滤sql中的日期 - php,sql
【发布时间】:2015-09-05 20:05:39
【问题描述】:

我在 sql 中有一个表,在该表中,我有一列包含以下格式的操作日期:2015-08-26 05:54:39

现在我用 php 构建了一个系统,我想获取同一个月内的所有操作。

我尝试运行它:

SELECT * FROM `Expenses` WHERE DateAction between '2015-08-01 00:00:00' and '2015-09-01 00:00:00'

它返回同一个月的动作日期,但它可以返回 2015-09-01 00:00:00 中的动作,所以我知道我需要得到该月的最后一天和放在sql查询中。

我该怎么做?

现在这是对 sql 的调用:

$query = mysql_query("SELECT * FROM `Expenses` WHERE `accountid` = $accountId");   

【问题讨论】:

    标签: php mysql sql-server


    【解决方案1】:

    你可以使用 YEAR() 和 MONTH() 或者像这样简单:

    WHERE 
    DateAction >= '2015-08-01 00:00:00' 
    and 
    DateAction  < '2015-09-01 00:00:00'
    

    这不包括 9 月的日期。

    【讨论】:

    • 如果您寻找性能,您应该使用它,因为 year() 和 month() 函数会为每个“获取”年份和月份而产生开销。只是为了说明我为什么要使用这个解决方案。
    【解决方案2】:

    幸运的是,有 MySQL 的 MONTH() 命令。

    https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_month

    SELECT * FROM `Expenses` WHERE MONTH(DateAction) = 8;
    //Selects all rows in the month "August"
    

    所有月份都以数字形式记录(1 是一月,2 是二月,...... 12 是十二月)。根据您的数据库时间和日期设置,它将始终是精确的。

    如果您想进一步自定义查询(选择相同的年份和月份),则可以阅读有关日期命令的更多信息here

    SELECT * FROM `Expenses` WHERE Year(DateAction) = '2015' AND MONTH(DateAction) = '8';
    //Selects all rows in year 2015 and month "August"
    

    【讨论】:

      【解决方案3】:

      我想它可能对你有帮助

      假设如果您想要八月份的结果或记录,您可以使用查询

      SELECT * FROM Expenses WHERE DATE_FORMAT(DateAction,'%c')='8'

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-14
        • 1970-01-01
        • 1970-01-01
        • 2016-07-27
        • 1970-01-01
        • 2021-09-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多