在Mysql中将dd-mm日期格式转换为dd-month格式

时间:2016-11-09 10:35:35

标签: mysql

enter image description here我有员工的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格式

任何人都可以指导我如何实现这一点。

提前感谢。

5 个答案:

答案 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日期函数

http://www.mysqltutorial.org/mysql-date_format/

答案 4 :(得分:-1)

用%b替换你的sql中的所有%m