MySQL日期从月份和日期格式中减去

时间:2019-11-02 04:53:52

标签: mysql sql

我有一个愚蠢的问题,我想从curdate()和接下来的30天内找到几天,从MySQL列“ increment_date”中将其格式化为DD-MON(10月11月,15月11月等...)< / p>

在比较curdate()时,我尝试从该日期开始将值设为8、13

tbl_people

+--------+-----------+----------------+
| in_num | last_name | increment_date |
+--------+-----------+----------------+
|      1 | AA        | 10-Nov         |
|      2 | BB        | 12-Nov         |
|      3 | CC        | 20-Dec         |
|      4 | DD        | 22-Dec         |
+--------+-----------+----------------+

我用下面的代码做到了

select last_name 
  from tbl_officer
 where increment_date>= DATE(curdate()) 
   and increment_date<= DATE_SUB(DATE(curdate()), INTERVAL 31 DAY)

但是代码超出了空结果。可能出什么问题了?谁能帮我吗?

3 个答案:

答案 0 :(得分:2)

编辑:

  

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);

答案 1 :(得分:0)

我认为您想要这样的东西(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(小提琴中有几个中间步骤):

SELECT last_name 
FROM tbl_officer
WHERE STR_TO_DATE(CONCAT(increment_date, '-2019'), "%d-%M-%Y") >= CURDATE() 
AND   STR_TO_DATE(CONCAT(increment_date, '-2019'), "%d-%M-%Y") <= DATE_ADD(CURDATE(), INTERVAL 1 MONTH);

结果:

last_name
       AA
       BB
       XX

答案 2 :(得分:0)

与当年合并后(假设您停留在当年之内),可以将str_to_date()函数与"%d-%b-%Y"模式一起使用:

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

Demo