26

我希望能够使用如下语句从 mysql 获取结果:

SELECT * 
  FROM table 
 WHERE amount > 1000 

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

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

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

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

4

7 回答 7

44

你很接近 - 向后比较(假设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])

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

参考:


于 2010-01-11T04:18:43.113 回答
8

使用该month()功能。

select month(now());
于 2010-01-11T04:02:21.720 回答
3

例如

$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 month是date_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 将只计算一次术语,并且可以利用索引进行搜索。

于 2010-01-11T04:09:58.663 回答
3

试试这个:

SELECT * 
FROM table 
WHERE amount > 1000 AND MONTH(dateStart) = MONTH('$m') AND YEAR(dateStart) = YEAR('$m')
于 2010-01-11T04:18:16.963 回答
0

试试这个

SELECT * 
      FROM table 
     WHERE amount > 1000 
       AND MONTH(datestart)
    GROUP BY EXTRACT(YEAR_MONTH FROM datestart)
于 2015-11-17T07:58:17.577 回答
0

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

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
于 2016-12-23T13:53:44.097 回答
0

适用于: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");
    
于 2017-08-03T08:36:38.600 回答