【问题标题】:MySQL select daterange data from two columnsMySQL从两列中选择日期范围数据
【发布时间】:2013-08-31 14:04:51
【问题描述】:

这是我的桌子:

ut_period

id | month | year | name 
1  | 9     | 2013 | dddd
2  | 2     | 2017 | eeee

我想在 2013-8 和 2018-9 中选择行。所以我写了这个查询,但是没有成功:

SELECT * 
FROM `ut_period` p  
WHERE `p`.`status` = 4 
  AND `p`.`year` >= '2013' 
  AND `p`.`mont` >= '8'
  AND `p`.`year` <= '2018' 
  AND `p`.`month` <= '9' 

我该怎么做?

【问题讨论】:

  • 投反对票的原因是什么?
  • 不要引用/反引号你的列和表名。它们只会增加视觉上的混乱,只是你犯语法错误的另一种方式。您需要它们的唯一原因是如果您有一个保留字的列名,并且使用保留字的列名是一个糟糕的主意,因此您可以同时避免这两个坏习惯。

标签: mysql sql select where


【解决方案1】:

我发现处理“年-月”的最简单方法是乘法——本质上是从某个日期开始的月数:

select p.*
from ut_period p
where (p.year * 12 + p.month) between 2013*12 + 8  and 2018*12 + 9;

如果您愿意,也可以将这些转换为 YYYYMM 形式的数字,这样可以更轻松地为范围输入常量值:

select p.*
from ut_period p
where (p.year * 100 + p.month) between 201308  and 201809;

【讨论】:

    【解决方案2】:

    对月份和年份使用 BETWEEN 子句

    (Documentation here)

    此外,您确实应该将日、月和年放在一个列中——这就是 MySQL 具有与日期相关的字段类型的原因。将日期、月份和年份替换为具有 DATE 字段类型的单列,然后您可以更轻松地比较日期。

    【讨论】:

      猜你喜欢
      • 2014-12-13
      • 2013-11-23
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 2016-04-09
      • 2012-12-21
      • 1970-01-01
      • 2019-12-22
      相关资源
      最近更新 更多