【问题标题】:How to get months between 2 given months如何在两个给定的月份之间获得月份
【发布时间】:2013-06-28 08:37:44
【问题描述】:

嘿,伙计们,我想获得一个包含两个给定月份之间月份的月份列表。例如,如果我从一月到六月给出一个月。然后我应该能够得到他们之间的所有月份。我想在转发器标题中使用这些月份。你能告诉我查询吗

select month(str_to_date('January','%M')); -- 1
select month(str_to_date('June','%M')); -- 6

通过上面的代码我会得到月份数字现在我想得到这两个之间的月份。

【问题讨论】:

  • 您为什么要为此使用 SQL?只需在代码中执行,然后从 2 循环到 5。

标签: mysql date calendar


【解决方案1】:

要给出几行,每行在这些月份之间都有一个月份编号,那么您可以执行以下操作:-

SELECT MONTH(STR_TO_DATE('January','%M')) + Sub1.aMonth
FROM (SELECT 0 AS aMonth UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12) Sub1
WHERE MONTH(STR_TO_DATE('January','%M')) + Sub1.aMonth <= MONTH(STR_TO_DATE('June','%M'))

假设月份在同一年

为您提供月份名称可能最简单的方法是将月份编号作为开始日期的月份数(在本例中为 2013 年 1 月 1 日),然后使用 MONTHNAME:-

SELECT MONTHNAME(DATE_ADD('2013-01-01', INTERVAL Sub1.aMonth MONTH))
FROM (SELECT 0 AS aMonth UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12) Sub1
WHERE MONTH(STR_TO_DATE('January','%M')) + Sub1.aMonth <= MONTH(STR_TO_DATE('June','%M'))

【讨论】:

  • 嘿伙计,您的代码有效,但我可以将月份名称作为输出而不是月份数字吗?
  • 为此添加了建议。
  • 嘿,如果我得到月份名称作为缩写而不是月份的完整名称,这可能吗?实际上我使用了 2 个中继器,并且由于某些月份的名称不均匀,它们的格式是不可接受的。
  • 您可以使用 DATE_FORMAT,而不是使用 MONTHNAME,使用 '%b' 格式
【解决方案2】:

您可以尝试使用 select (what you want) from table where (var_first_month) between (second_month)。希望有帮助。

【讨论】:

    【解决方案3】:

    试试这个

       SELECT  month(str_to_date(`your_date_column`,'%M')) as my_month
       FROM `your_table`
       WHERE month(str_to_date(`your_date_column`,'%M')) BETWEEN month(str_to_date('January','%M')) 
                                AND   month(str_to_date('June','%M'))
    

    【讨论】:

    • 嘿,我的表中有月份名称而不是数字。我想要月份名称作为输出。您的查询看起来不错,但您可以更改它以便我从表中获取月份名称。
    【解决方案4】:

    如果月份是同一年,我认为您需要这样的查询:

    SELECT
      DATE_FORMAT(STR_TO_DATE(months.m, '%m'), '%M')
    FROM
      (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3
       UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
       UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
       UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months
    WHERE
      months.m > month(str_to_date('January','%M'))
      AND months.m < month(str_to_date('June','%M'));
    

    请看小提琴here。但视情况而定,通过代码获取月份名称可能更容易(例如,使用 PHP 或其他脚本...)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      相关资源
      最近更新 更多