当前月份和前一个月份的特定日期

3df52oht  于 2021-06-18  发布在  Mysql
关注(0)|答案(5)|浏览(366)

是否可以使日期的年和月部分动态(基于当前年和月)而不是硬编码?

SELECT SUM(`amount`)
FROM employees 
WHERE (`date` between "2018-08-26" and "2018-09-26") AND `status` = 'Pending';

在上面的示例中,如果当前月份是 9 那么查询应该是 08-26 以及 09-26 ,如果当前月份为 10 那么 09-26 以及 10-26 等等。

piztneat

piztneat1#

使用now()和last month(date\u sub(now(),interval 1 month))在下面进行尝试:

SELECT SUM(`amount`) FROM employees 
WHERE (`date` between DATE_SUB(NOW(), INTERVAL 1 MONTH) and now())
AND `status` = 'Pending';
fsi0uk1n

fsi0uk1n2#

您可以使用过程来代替原始查询,它将根据您提供的日期动态创建日期。
分隔符$$
--调用get\u sum(15)--动态传递日期
删除过程(如果存在)获取\u和$$
分隔符;
分隔符$$

--创建过程“get\u sum”

create definer='root'@'localhost'过程get\u sum(在天smallint中)begin
声明当前月份日期时间;申报上月日期时间;
选择str \u to \u date(concat(year(now()),'-',month(now()),'-',day),'%y-%m-%d')到当前\u month;
选择日期子项(当前月份,间隔1个月)到上个月份;
选择总和( amount )从员工那里( date 上个月和本月之间)和 status ='挂起';
结束$$
分隔符;

c3frrgcw

c3frrgcw3#

如果您想查询上月的数据,使用这样的查询就足够了:

SELECT * FROM my_table
WHERE some_datetime_column > DATE_ADD(NOW(), INTERVAL -1 MONTH);

另外,如果要获取当前月份/年份,请尝试以下操作:

SELECT MONTH(NOW()), YEAR(NOW())

演示
更新
试试这个:

--here you specify the day of the month you want
SELECT @days := 26 - DAY(NOW());
SELECT @startDate := DATE_ADD(CAST(NOW() AS DATE), INTERVAL @days DAY),
       @endDate := DATE_ADD(DATE_ADD(CAST(NOW() AS DATE), INTERVAL @days DAY), INTERVAL -1 MONTH)

另一个演示
然后你可以像这样使用它:

SELECT * FROM t
WHERE date_column BETWEEN @startDate AND @endDate
bmp9r5qi

bmp9r5qi4#

获取当前月份使用

MONTH(NOW())

获取当前年度使用

YEAR(NOW())

但你不需要这些
用这个-

SELECT SUM(`amount`) FROM employees 
WHERE (`date` between DATE_ADD(CURDATE(), INTERVAL -1 MONTH) and CURDATE()) 
AND `status` = 'Pending';

使用curdate()获取当前日期。
要获得与上月相同的日期,请使用:

DATE_ADD(CURDATE(), INTERVAL -1 MONTH)

截至2018年9月25日

SELECT CURDATE()

输出:

2018-09-25

上月

SELECT DATE_ADD(CURDATE(), INTERVAL -1 MONTH)

输出:

2018-08-25
chhqkbe1

chhqkbe15#

以下是如何构建所需日期:

SELECT 
    CURRENT_DATE,
    STR_TO_DATE(CONCAT_WS('-', YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 26), '%Y-%m-%d'),
    STR_TO_DATE(CONCAT_WS('-', YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 26), '%Y-%m-%d') - INTERVAL 1 MONTH
-- 2018-09-25 | 2018-09-26 | 2018-08-26

并在查询中使用以上内容:

SELECT SUM(`amount`)
FROM employees 
WHERE `date` BETWEEN
    STR_TO_DATE(CONCAT_WS('-', YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 26), '%Y-%m-%d') - INTERVAL 1 MONTH AND
    STR_TO_DATE(CONCAT_WS('-', YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 26), '%Y-%m-%d')
AND `status` = 'Pending';

相关问题