我有一张带有dob的员工表。每个月我都想要当前月份生日列表。 我想要查询当月员工生日列表。 dob文件的日期类似于'31 -01-1986'等等。请帮我搞定。
答案 0 :(得分:2)
由于您的dob
列包含'31-01-1986'
之类的值,因此它必须是字符串数据类型而不是时间数据类型。这使得执行日期操作变得困难(并且很慢),例如您所希望的;你最好做一个纯粹的字符串操作:
SELECT *
FROM employee
WHERE CAST(SUBSTRING(dob, 4, 2) AS UNSIGNED) = MONTH(CURRENT_DATE)
我建议您将表转换为使用适当的时态数据类型,例如DATE
:
ALTER TABLE employee ADD COLUMN new_dob DATE AFTER dob;
UPDATE employee SET new_dob = STR_TO_DATE(dob, '%d-%m-%Y');
ALTER TABLE employee DROP COLUMN dob, CHANGE new_dob dob DATE;
(还要记住根据需要调整索引)。
请注意,您需要更新应用程序代码以使用DATE
文字,包括之前的声明:
SELECT *
FROM employee
WHERE MONTH(dob) = MONTH(CURRENT_DATE)
答案 1 :(得分:-2)
使用此
WHERE month(dob) = month(now)