【问题标题】:How to get all records before any specified month in mysql如何在mysql中获取任何指定月份之前的所有记录
【发布时间】:2019-11-14 17:46:59
【问题描述】:

我想使用 mysql 选择任何指定月份之前的所有记录。这是我的尝试声明:

SELECT SUM(amount) as allPreviousAmount FROM `fn_table`
WHERE MONTH(transdate) < 1 AND YEAR(transdate) = YEAR(CURRENT_DATE()) 

transdatedatetime 数据类型。

我有 2018 年 12 月的数据。但这并没有选择数据。然后我删除了 Year 部分,仍然没有选择数据。翻译时间为 2018-12-31 15:59:41。

请修复它并解释为什么这不起作用。

【问题讨论】:

  • 返回是0是什么?
  • 返回值为\null
  • 有没有小于1的月份?
  • 仅在当前年的任何指定月份之前
  • 请添加输入数据和预期输出。

标签: mysql select where-clause


【解决方案1】:

这样就可以了(假设没有未来的日期):

SELECT SUM(amount) as allPreviousAmount 
FROM `fn_table`
WHERE MONTH(transdate) < ? OR YEAR(transdate) < YEAR(CURRENT_DATE())

? 替换为您希望获得结果的月份。

【讨论】:

  • ?不能像 OP 示例那样为 1
  • 是的,它可以是 1。
  • 这正是我想要的。对我来说如此简单和优雅。
  • @forpas 你是对的对不起我没有意识到你把AND改成了OR
【解决方案2】:

将年份乘以 100 加上月份(两边)并进行比较。

set @dt1 = '2019-10-01';

select  @dt1,current_date,
            year(@dt1) * 100 + month(@dt1),
            case 
                when year(@dt1) * 100 + month(@dt1) < year(current_date) * 100 + month(current_date) then
                    'Less than'
                else 'other'
                end as result;

------------+--------------+--------------------------------+-----------+
| @dt1       | current_date | year(@dt1) * 100 + month(@dt1) | result    |
+------------+--------------+--------------------------------+-----------+
| 2019-10-01 | 2019-11-14   |                         201910 | Less than |
+------------+--------------+--------------------------------+-----------+
1 row in set (0.00 sec)

【讨论】:

  • 请您举例说明一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
相关资源
最近更新 更多