我有员工的dd / mm格式的出生日期,根据这些详细信息,我需要查找今天,明天和后天生日的员工,Emp_dob列必须以此格式显示日期(例如:员工的生日今天是09-NOV)。
下面是mysql查询
SELECT
Emp_Name,Emp_Department,
Emp_DOB
FROM mldob.tbl_mldobtest WHERE
Emp_DOB IN (
DATE_FORMAT(CURDATE() + INTERVAL 1 DAY,'%d-%m'),
DATE_FORMAT(CURDATE(),'%d-%m'),
DATE_FORMAT(CURDATE()+INTERVAL 2 DAY,'%d-%m')
)
order by tbl_mldobtest.Emp_DOB;
问题是EMP_DOB列以09-11格式显示dob但我需要09-Nov格式
任何人都可以指导我如何实现这一点。
提前感谢。
答案 0 :(得分:1)
编辑:对不起,没有注意DOB只持有日/月而不是完整日期。
假设Emp_DOB是CHAR(5),例如, ' 09-11'
SELECT Emp_Name, Emp_Department, DATE_FORMAT(CONCAT(DATE_FORMAT(CURDATE(), '%Y'), '-', SUBSTRING(Emp_DOB,4,2), '-', SUBSTRING(Emp_DOB,1,2)), '%d-%b')
FROM tbl_mldobtest
WHERE Emp_DOB IN (
DATE_FORMAT(CURDATE() + INTERVAL 1 DAY,'%d-%m'),
DATE_FORMAT(CURDATE(),'%d-%m'),
DATE_FORMAT(CURDATE()+INTERVAL 2 DAY,'%d-%m')
)
ORDER BY Emp_DOB;
如果您将Emp_DOB作为日期(我最初假设),那么这将执行您想要的操作,无需在where子句中格式化日期:
SELECT Emp_Name, Emp_Department, DATE_FORMAT(Emp_DOB, '%d-%b')
FROM tbl_mldobtest
WHERE DATE(Emp_DOB) BETWEEN DATE(CURDATE()) AND DATE(DATE_ADD(CURDATE(), INTERVAL 2 DAY))
ORDER BY Emp_DOB;
答案 1 :(得分:0)
缩写的月份名称的格式为'%b',而不是'%m'
答案 2 :(得分:0)
尝试以下格式
DATE_FORMAT(CURDATE(),'%d-%b')
答案 3 :(得分:0)
这应该有效
SELECT
Emp_Name,Emp_Department,
DATE_FORMAT(Emp_DOB, '%e%a') as emp_dob
FROM mldob.tbl_mldobtest WHERE
Emp_DOB IN (
DATE_FORMAT(CURDATE() + INTERVAL 1 DAY,'%d-%m'),
DATE_FORMAT(CURDATE(),'%d-%m'),
DATE_FORMAT(CURDATE()+INTERVAL 2 DAY,'%d-%m')
)
order by tbl_mldobtest.Emp_DOB;
您也可以参考mysql日期函数
答案 4 :(得分:-1)
用%b替换你的sql中的所有%m