我有一个愚蠢的问题,我想在curdate()和接下来的30天内,从被格式化为DD-MON (10-11月,15-11月等)的MySQL列"increment_date“中找出无一天。
在比较curdate()时,我尝试从该日期获得8,13的值。
tbl_officer
+--------+-----------+----------------+
| 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)但是代码输出的结果是空的。可能出什么问题了?有人能帮我吗?
发布于 2019-11-02 05:02:29
编辑:
用于将不同格式的字符串数据转换为日期值的
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);发布于 2019-11-02 05:50:54
我想你想要这样的东西(小提琴):
创建并填充表:
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
XXhttps://stackoverflow.com/questions/58668340
复制相似问题