【问题标题】:Select between "last october" and today在“去年 10 月”和今天之间选择
【发布时间】:2021-02-16 03:25:27
【问题描述】:

在 SQL 查询方面仍然是初学者。 我需要从带有日期字段的表中选择字段,例如从 10 月 1 日到今天。

类似

SELECT field FROM table WHERE table.date BETWEEN ***last october*** and CURDATE()

那么,我可以放入什么来代替 去年 10 月,让它在一年内不再碰它就可以工作?

【问题讨论】:

    标签: mysql date select


    【解决方案1】:

    我会检查当前月份是否是 10 月 -> 12 月。在这种情况下,我可以得到当年的 10 月,否则,我会得到去年的 10 月:

    -- returns <current year>-10-01 if we are in octobre, november or december, else <current year - 1>-10-01
    SELECT CONCAT(IF(MONTH(CURDATE()) >= 10, YEAR(CURDATE()), YEAR(CURDATE()) - 1),'-10-01');
    

    SELECT field
    FROM table
    WHERE table.date BETWEEN
          CONCAT(IF(MONTH(CURDATE()) >= 10, YEAR(CURDATE()), YEAR(CURDATE()) - 1),'-10-01')
      and
          CURDATE()
    

    【讨论】:

      【解决方案2】:

      您需要运行几个子查询:

      a) 本月:

      mysql> select month(now());
      +--------------+
      | month(now()) |
      +--------------+
      |           11 |
      +--------------+
      

      b) 获取比较年份,例如如果今年 10 月 1 日过去,则返回当前年份,否则返回上一年:

      mysql> select case when month(now()) >= 10 then year(now()) else year(now()) - 1 end;
      +------------------------------------------------------------------------+
      | case when month(now()) >= 10 then year(now()) else year(now()) - 1 end |
      +------------------------------------------------------------------------+
      |                                                                   2020 |
      +------------------------------------------------------------------------+
      

      c) 去年 10 月 1 日的构建日期:

      mysql> select concat(case when month(now()) >= 10 then year(now()) else year(now()) - 1 end, '-10-01');
      +------------------------------------------------------------------------------------------+
      | concat(case when month(now()) >= 10 then year(now()) else year(now()) - 1 end, '-10-01') |
      +------------------------------------------------------------------------------------------+
      | 2020-10-01                                                                               |
      +------------------------------------------------------------------------------------------+
      

      最后一个查询替换last october

      因此最终的查询是:

      SELECT field FROM table WHERE table.date BETWEEN CONCAT(CASE WHEN MONTH(NOW()) >= 10 THEN YEAR(NOW()) ELSE YEAR(NOW()) - 1 END, '-10-01') AND DATE(NOW())
      

      【讨论】:

        猜你喜欢
        • 2014-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-28
        • 2019-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多