我有一个日期字段已设置为字符串(不幸的是我无法更改此字符),显示为' 2016-02-01'
我想编写一个查询,我可以使用where子句来始终选择上个月。
如果有帮助,数据总是设置为1月1日。
答案 0 :(得分:3)
SELECT d as m, DATE(DATE_ADD(TIMESTAMP(d) , -1, 'MONTH')) as prev_m
FROM
(SELECT '2016-01-01' AS d),
(SELECT '2016-02-01' AS d),
(SELECT '2016-03-01' AS d),
(SELECT '2016-04-01' AS d),
(SELECT '2016-05-01' AS d),
(SELECT '2016-06-01' AS d),
(SELECT '2016-07-01' AS d),
(SELECT '2016-08-01' AS d),
(SELECT '2016-09-01' AS d),
(SELECT '2016-10-01' AS d),
(SELECT '2016-11-01' AS d),
(SELECT '2016-12-01' AS d)
为WHERE子句
添加
(我在下面意识到你最有可能的问题)
WHERE YEAR(d) = YEAR(DATE_ADD(CURRENT_DATE(), -1, 'MONTH'))
AND MONTH(d) = MONTH(DATE_ADD(CURRENT_DATE(), -1, 'MONTH'))
答案 1 :(得分:0)
除了Mikhail Berlyant的回答(date(date_add(timestamp(d),-1,'month'))
)之外,您还可以考虑构建一个表,其中当前月份在一列中,而前一个月在另一列中。根据您的需要,此表还可以包含与六个月前,一年前相对应的列等。然后您可以加入该表。