我有一张包含日期行的表格, 我需要获得一年的行:
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年)
答案 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
中受益