Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在mysql中如何从日期开始计算月份_Php_Sql_Mysql_Phrase - Fatal编程技术网

Php 在mysql中如何从日期开始计算月份

Php 在mysql中如何从日期开始计算月份,php,sql,mysql,phrase,Php,Sql,Mysql,Phrase,我希望能够使用如下语句从mysql获取结果: SELECT * FROM table WHERE amount > 1000 SELECT * FROM table WHERE amount > 1000 AND dateStart = MONTH('$m') 但是我想获取约束为某个月和某个年的结果(基于用户的输入)。。。我试着这样做: SELECT * FROM table WHERE amount > 1000 SELE

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

SELECT * 
  FROM table 
 WHERE amount > 1000 
SELECT * 
  FROM table 
 WHERE amount > 1000 
   AND dateStart = MONTH('$m')   
但是我想获取约束为某个月和某个年的结果(基于用户的输入)。。。我试着这样做:

SELECT * 
  FROM table 
 WHERE amount > 1000 
SELECT * 
  FROM table 
 WHERE amount > 1000 
   AND dateStart = MONTH('$m')   
$m
是一个月,但它给出了错误

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

使用
month()
功能

select month(now());
例如

$date=sprintf(“%04d-%02d-01”“,$year,$month);
$query=”
挑选
x、 y,日期开始
从…起
数据表名
哪里
和数量>1000
和dateStart>=$date
和dateStart<$date+间隔1个月
";
mysql\u查询($query。。。
这将创建一个查询,如

WHERE
  AND amount > 1000
  AND dateStart >= '2010-01-01'
  AND dateStart < '2010-01-01'+Interval 1 month
在哪里
和数量>1000
和日期开始>='2010-01-01'
开始日期<'2010-01-01'+间隔1个月
+间隔1个月
是一种替代方法

选择日期('2010-01-01'+间隔1个月)
->
2010-02-01

选择日期('2010-12-01'+间隔1个月)
->
2011-01-01

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

尝试以下操作:

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

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

注意事项:
  • 请注意,您正在使用或您的风险
  • 对列的函数调用意味着索引(如果存在)不能使用
选择:
因为在列上使用函数不能使用索引,所以更好的方法是在和STR_to_DATE函数之间使用

WHERE startdate BETWEEN STR_TO_DATE([start_date], [format]) 
                    AND STR_TO_DATE([end_date], [format])
有关格式化语法,请参阅文档

参考:
试试这个

SELECT * 
      FROM table 
     WHERE amount > 1000 
       AND MONTH(datestart)
    GROUP BY EXTRACT(YEAR_MONTH FROM datestart)
如果(日期字段为文本,然后将此字符串转换为日期),请尝试此操作:


工作环境: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");
    

人类是否清楚你的意图并不重要。计算机是愚蠢的。我没有投你反对票,但现在的答案对回答这个问题几乎没有帮助。
SELECT EXTRACT(YEAR FROM "2017-06-15");