0

大家好,我有这个 SQL

SELECT DATE_ADD( '2009-'+ MONTH( NOW() ) +'-01' , INTERVAL -1 MONTH );

我无法让它工作,我在这里做错了什么?

坦克寻求帮助。

4

3 回答 3

1
SELECT CONCAT_WS('-', '2009', MONTH(NOW()), '01') - INTERVAL 1 MONTH
于 2009-11-10T13:53:04.363 回答
1

这是不起作用的日期的串联。它将字符串转换为数字,因此您得到 2009+11+-1 = 2019,然后无法转换为日期。

您可以使用 last_day 函数来获取当前月份的最后一天,而不是连接字符串中的日期,加一天得到下个月的第二天,然后减去两个月得到第一天前一个月:

select last_day(now()) + interval 1 day - interval 2 month;
于 2009-11-10T14:10:32.860 回答
-1

加号是算术运算符,你必须使用 concat。

SELECT DATE_ADD( concat('2009-',MONTH(NOW()),'-01') , INTERVAL -1 MONTH )

或更好

select date(now()) -  interval day(NOW())-1 day - interval 1 month;

(这也适用于 2010 年)

于 2009-11-10T13:58:15.000 回答