2014-01-08 4 views
-2

У меня есть таблица сотрудников с добом. Каждый месяц мне нужен список текущего дня рождения месяца. Я хочу получить запрос на день рождения сотрудника месяца. Дата файла dob, такая как «31 -01-1986» и так далее. Пожалуйста, помогите мне получить это.Получить текущий месяц список дней рождения список сотрудников таблица

+3

Почему вы хранить дату в не Стандартный формат -ANSI? – Kermit

+3

Чтобы переключиться на точку @ FreshPrinceOfSO. Храните дату как тип данных даты и вы сэкономите много хлопот. – Zane

ответ

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) 
-2

Используйте этот

WHERE month(dob) = month(now) 
+2

Было бы хорошо, если бы дата OP была сохранена как дата. – Kermit

+0

Я довольно уверен, что mySQL выполнит неявное преобразование в дату из строки. SQL-сервер определенно делает .. – Sparky

+0

Докажите это мне, пожалуйста. – Kermit

Смежные вопросы