我有一个愚蠢的问题,我想从curdate()和接下来的30天内找到几天,从MySQL列“ increment_date”中将其格式化为DD-MON(10月11月,15月11月等...)< / p>
在比较curdate()时,我尝试从该日期开始将值设为8、13
+--------+-----------+----------------+
| 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)
但是代码超出了空结果。可能出什么问题了?谁能帮我吗?
答案 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