【问题标题】:how do I get month from date in mysql如何从mysql中的日期获取月份
【发布时间】:2011-01-03 15:13:07
【问题描述】:

我希望能够使用这样的语句从 mysql 获取结果:

SELECT * 
  FROM table 
 WHERE amount > 1000 

但我想获取限制在某个月份和年份的结果(基于用户的输入)......我正在尝试这样:

SELECT * 
  FROM table 
 WHERE amount > 1000 
   AND dateStart = MONTH('$m')   

...$m 是一个月,但它给出了错误。

在该表中,它实际上有两个日期:startDateendDate,但我关注的是 startDate。输入值将是月份和年份。如何根据当年的那个月份来表达获得结果的 SQL 语句?

【问题讨论】:

  • 你的意图是否对人类很清楚并不重要。计算机是愚蠢的。

标签: php sql mysql phrase


【解决方案1】:

使用month() 函数。

select month(now());

【讨论】:

  • 我没有对你投反对票,但按原样提供的答案几乎没有帮助提出问题。
【解决方案2】:

例如

$date = sprintf("'%04d-%02d-01'", $year, $month);
$query = "
  SELECT
    x,y,dateStart
  FROM
    tablename
  WHERE
    AND amount > 1000
    AND dateStart >= $date
    AND dateStart < $date+Interval 1 month
";
mysql_query($query, ...

这将创建一个查询,例如

WHERE
  AND amount > 1000
  AND dateStart >= '2010-01-01'
  AND dateStart < '2010-01-01'+Interval 1 month

+ Interval 1 monthdate_add() 的替代品。

SELECT Date('2010-01-01'+Interval 1 month)-> 2010-02-01
SELECT Date('2010-12-01'+Interval 1 month)-> 2011-01-01
这样你总能得到下个月的第一天。您想要的记录必须在该日期之前有一个 dateStart,但在您传递给 sprintf() 的月份(和年份)的第一天之后/等于。
'2010-01-01'+Interval 1 month 不会在行之间更改。 MySQL 将只计算一次术语,并且可以利用索引进行搜索。

【讨论】:

    【解决方案3】:

    试试这个:

    SELECT * 
    FROM table 
    WHERE amount > 1000 AND MONTH(dateStart) = MONTH('$m') AND YEAR(dateStart) = YEAR('$m')
    

    【讨论】:

      【解决方案4】:

      您很接近 - 进行了反向比较(假设 startDate 是 DATETIME 或 TIMESTAMP 数据类型):

      SELECT * 
        FROM table 
       WHERE amount > 1000 
         AND MONTH(dateStart) = {$m}
      

      注意事项:


      替代方案:


      因为在列上使用函数不能使用索引,所以更好的方法是使用BETWEENSTR_TO_DATE 函数:

      WHERE startdate BETWEEN STR_TO_DATE([start_date], [format]) 
                          AND STR_TO_DATE([end_date], [format])
      

      有关格式化语法,请参阅文档。

      参考:


      【讨论】:

        【解决方案5】:

        试试这个

        SELECT * 
              FROM table 
             WHERE amount > 1000 
               AND MONTH(datestart)
            GROUP BY EXTRACT(YEAR_MONTH FROM datestart)
        

        【讨论】:

          【解决方案6】:

          如果(日期字段是文本,然后将此字符串转换为日期)试试这个:

          SELECT * FROM `table_name` WHERE MONTH(STR_TO_DATE(date,'%d/%m/%Y'))='11'
          
          //This will give month number MONTH(STR_TO_DATE(date,'%d/%m/%Y'))
          //If its return 11 then its November
          // Change date format with your date string format  %d/%m/%Y
          

          【讨论】:

            【解决方案7】:

            适用于:MySQL 5.7、MySQL 5.6、MySQL 5.5、MySQL 5.1、MySQL 5.0、MySQL 4.1、MySQL 4.0、MySQL 3.23

            • 日期:

              SELECT EXTRACT(DAY FROM "2017-06-15");
              
            • 月份:

              SELECT EXTRACT(MONTH FROM "2017-06-15");
              
            • 年份:

              SELECT EXTRACT(YEAR FROM "2017-06-15");
              

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-10-20
              • 1970-01-01
              • 2018-12-08
              • 1970-01-01
              • 1970-01-01
              • 2012-02-16
              • 1970-01-01
              相关资源
              最近更新 更多