2017-09-13 84 views
0

过去,我有一个表的日期行, 我需要让行的一年: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日提前

+1

变化得益于'DATEADD( '2017年9月13日' ...'是'DATEADD(“2017年9月1日'...'?这当然假设你有那个日期范围内的所有记录(注意我们所做的只是将13更改为01)但是,你还需要说'and cal_date> ='2017- 09-01''? – xQbert

+0

谢谢,但日期是动态添加的,可以是一个月中的任何一天,我只是在想,甚至可以有不同的价格,所以结果必须从2017年9月13日开始。为此,我w虐待编辑问题。 – Helenp

+0

'DATE_ADD('2017-09-13',INTERVAL 11个月)'看起来奇怪,你想要11个月不到1年,所以只需添加11个月? 2017年9月13日至2018年8月12日是11个月。或者可以加1年减1个月。身份证'关注1月31日和二月二十八日在这种类型的行动... – xQbert

回答

0

˚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) 
0

似乎一旦你占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'; 

这个问题会从talking to the duck first

相关问题