Php 在mysql中如何从日期开始计算月份
我希望能够使用如下语句从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
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");