MySQL日期减去月份&;日期格式

MySQL日期减去月份&;日期格式,mysql,sql,Mysql,Sql,我有一个愚蠢的问题,我想从格式为DD-MON(11月10日、11月15日等)的MySQL列“increment_date”中找到curdate()和接下来30天的天数 在比较curdate()时,我尝试从该日期获取值8和13 tbl_官员 我使用下面的代码来实现这一点 select last_name from tbl_officer where increment_date>= DATE(curdate()) and increment_date<= DATE_SU

我有一个愚蠢的问题,我想从格式为DD-MON(11月10日、11月15日等)的MySQL列“increment_date”中找到curdate()和接下来30天的天数

在比较curdate()时,我尝试从该日期获取值8和13

tbl_官员 我使用下面的代码来实现这一点

select last_name 
  from tbl_officer
 where increment_date>= DATE(curdate()) 
   and increment_date<= DATE_SUB(DATE(curdate()), INTERVAL 31 DAY)
选择姓氏
来自tbl_官员
其中增量\ u日期>=日期(curdate())
和增量日期编辑:

STR_TO_DATE
用于转换不同格式字符串数据的函数 格式化为日期值

您的表数据没有年份值,因此我们需要动态追加当前年份,例如:

SELECT * FROM tbl_officer where STR_TO_DATE(CONCAT(increment_date, '-2019'), "%d-%b-%Y")
BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 31 DAY);
下面是我将如何完成它:

SELECT * FROM tbl_officer where STR_TO_DATE(CONCAT(increment_date, '-', YEAR(NOW())), "%d-%b-%Y") 
BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 31 DAY);
编辑:

STR_TO_DATE
用于转换不同格式字符串数据的函数 格式化为日期值

您的表数据没有年份值,因此我们需要动态追加当前年份,例如:

SELECT * FROM tbl_officer where STR_TO_DATE(CONCAT(increment_date, '-2019'), "%d-%b-%Y")
BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 31 DAY);
下面是我将如何完成它:

SELECT * FROM tbl_officer where STR_TO_DATE(CONCAT(increment_date, '-', YEAR(NOW())), "%d-%b-%Y") 
BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 31 DAY);

我想你想要这样的东西():

创建并填充表格:

CREATE TABLE tbl_officer
(
  in_num INTEGER NOT NULL,
  last_name VARCHAR (25) NOT NULL,
  increment_date VARCHAR (10) NOT NULL
);

INSERT INTO tbl_officer VALUES (1, 'AA', '10-Nov'), (2, 'BB', '12-Nov'), (3, 'CC', '20-Dec'),
(4, 'DD', '22-Dec'), (5, 'XX', '15-Nov');  -- XX added for testing
然后运行此SQL(在fiddle中有两个中间步骤):


我想你想要这样的东西():

创建并填充表格:

CREATE TABLE tbl_officer
(
  in_num INTEGER NOT NULL,
  last_name VARCHAR (25) NOT NULL,
  increment_date VARCHAR (10) NOT NULL
);

INSERT INTO tbl_officer VALUES (1, 'AA', '10-Nov'), (2, 'BB', '12-Nov'), (3, 'CC', '20-Dec'),
(4, 'DD', '22-Dec'), (5, 'XX', '15-Nov');  -- XX added for testing
然后运行此SQL(在fiddle中有两个中间步骤):


在与当前年度组合后,您可以使用
str\u to\u date()
函数和
%d-%b-%Y
模式(假设您在当前年度内):


在与当前年份组合后,您可以将
str_to_date()
函数与
%d-%b-%Y”
模式一起使用(假设您在当前年份内):


您能发布表格/数据结构吗添加表格/数据structure@MCITTrends所以,如果你没有年值,如果有,比如说10月10日,这意味着2019年或2020年?@Bilal Siddiqui。不,它没有确定的年份值。这只是一个日期和月份。@BarbarosÖzhan感谢您指出这一点,我已经在date_ADD函数中编辑了要立即使用的答案()。您能发布表/数据结构吗?添加了表/数据structure@MCITTrends所以,如果你没有年值,如果有,比如说10月10日,这意味着2019年或2020年?@Bilal Siddiqui。不,它没有确定的年份值。这只固定了一个日期和月份。@BarbarosÖzhan感谢您指出这一点,我已经在date_ADD函数中编辑了要立即使用的答案()。如果是12月底,并且您的
增量_日期是
1月10日
,会发生什么。你怎么知道这是指今年还是下一年?哪个版本的MySQL?带有
increment\u date>=date(curdate())和increment\u date=curdate(),当12月底,你的
increment\u date
1月10日时会发生什么。您如何知道这是指今年还是下一年?哪个版本的MySQL?带有
increment\u date>=date(curdate())和increment\u date=curdate()和
select count(*) as "Number of Days"
  from tbl_officer
 where str_to_date(concat(increment_date,'-',year(curdate())),"%d-%b-%Y")
       between curdate() and curdate() + interval 30 day;

 Number of Days
 --------------
 2