sql查询添加1年,少于几个月过去的日子

时间:2017-09-13 19:19:11

标签: mysql intervals

我有一张包含日期行的表格, 我需要获得一年的行:

    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日至2018年9月12日。

我希望结果从2017年9月13日到2018年9月12日。

更新,这是正确的查询,就像我想要的那样:     在哪里cal_date&gt; ='2017-09-13'和cal_date&lt; DATE_ADD('2017-09-13',     INTERVAL 1年)

2 个答案:

答案 0 :(得分:0)

对于基于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) 

答案 1 :(得分:0)

一旦您考虑到cal_date&gt; =同一日期

,似乎工作正常

你处理了&lt;未来的约会,但你没有处理&gt;或&gt; =当前日期。目前,您将始终返回从今天起超过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

中受益