[英]MySQL Date subtract from Month & Date Format
我有一个愚蠢的问题,我想从格式为 DD-MON 的 MySQL 列“increment_date”(11 月 10 日、11 月 15 日等)中找到 curdate() 和接下来 30 天内的天数
在比较 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)
但代码输出空结果。 可能出了什么问题? 谁能帮我?
编辑:
STR_TO_DATE
function 用于将不同格式的字符串数据转换为日期值。
您的表数据没有年份值,因此我们需要在当前年份动态 append,例如:
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 (小提琴中有几个中间步骤):
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
与当年结合后,您可以使用str_to_date()
function 与"%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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.