代码之家  ›  专栏  ›  技术社区  ›  Eugene Yarmash

在mysql中使用年和月字段检索范围内的记录

  •  1
  • Eugene Yarmash  · 技术社区  · 16 年前

    我有一张mysql表,上面有年份( YEAR(4) TINYINT )列。选择某个范围内的所有记录(例如2009-10)的最佳方法是什么。。2010-02 ?

    4 回复  |  直到 16 年前
        1
  •  3
  •   Thomas    16 年前

    下面是一个通用的解决方案:

    Select...
    From ...
    Where ( Year = <StartYear> And Month >= <StartMonth> )
        Or ( Year > <StartYear> And Year < <EndYear> )
        Or ( Year = <EndYear> And Month <= <EndMonth> )
    
        2
  •  2
  •   OMG Ponies    16 年前

    用途:

    WHERE (year = 2009 AND month >= 10)
       OR (year = 2010 AND month <= 2)
    

    …或者,使用UNION ALL:

    SELECT t.*
      FROM TABLE t
     WHERE year = 2009 AND month >= 10
    UNION ALL
    SELECT t.*
      FROM TABLE t
     WHERE year = 2010 AND month <= 2
    

    UNION ALL UNION ,但不会删除重复项。

        3
  •  1
  •   Daniel Vassallo    16 年前

    year_month YYYYMM 格式,例如 201002 请确保在该列上创建一个索引,您还可以创建两个触发器,以便在插入和更新时自动更新该列。

    然后您可以使用:

    WHERE year_month BETWEEN 200710 AND 201002
    

    这将使用上的索引 年/月 .

        4
  •  1
  •   Peder    9 年前

    当开始年份和结束年份相同时,接受的答案不适用。例如,2017-01至2017-08。涵盖本案例的修订psuedocode将是

    ((年=开始年月>=开始月)或(年)>StartYear)和((year=EndYear和month<=EndMonth)或(year<年末)