SQL查询添加1年,少天一个月
问题描述:
过去,我有一个表的日期行, 我需要让行的一年:SQL查询添加1年,少天一个月
SELECT DATE_FORMAT(cal_date, '%e %M') as cal_date, price_client,
price_owner, description FROM table WHERE cal_date <
DATE_ADD('2017-09-13' , INTERVAL 1 year)
此查询的结果是日行与日期从2017年9月1日至9月12日2018年
我想的结果从2017年9月13日至9月12日提前
答
˚F2018
由于或基于CURDATE的一般格式为(),你可以使用
SELECT
DATE_FORMAT(cal_date, '%e %M') as cal_date
, price_client
, price_owner
, description
FROM table WHERE cal_date <
DATE_ADD(DATE_ADD(LAST_DAY(DATE_SUB(CURDATE(), interval 30 day), interval 1 day) ,
INTERVAL 1 year)
答
似乎一旦你占cal_date> =同日
您处理<将来某一天的工作,但你没有处理>或> =当前日期。按照现状,您将始终返回从今天起超过1年的所有记录。你没有定义下限。
DEMO:http://rextester.com/WDXHE5921
SELECT DATE_FORMAT(cal_date, '%e %M%Y') as cal_date, price_client,
price_owner, description
FROM table
WHERE cal_date < DATE_ADD('2017-09-13' , INTERVAL 1 year)
and cal_date >= '2017-09-13';
变化得益于'DATEADD( '2017年9月13日' ...'是'DATEADD(“2017年9月1日'...'?这当然假设你有那个日期范围内的所有记录(注意我们所做的只是将13更改为01)但是,你还需要说'and cal_date> ='2017- 09-01''? – xQbert
谢谢,但日期是动态添加的,可以是一个月中的任何一天,我只是在想,甚至可以有不同的价格,所以结果必须从2017年9月13日开始。为此,我w虐待编辑问题。 – Helenp
'DATE_ADD('2017-09-13',INTERVAL 11个月)'看起来奇怪,你想要11个月不到1年,所以只需添加11个月? 2017年9月13日至2018年8月12日是11个月。或者可以加1年减1个月。身份证'关注1月31日和二月二十八日在这种类型的行动... – xQbert