2014-01-08 50 views
-2

我有一個僱員表與dob。每個月我都想要當前的月份生日列表。 我想查詢當前月份的員工生日列表。 dob文件的日期類似於'31 -01-1986'等等。請幫我解決這個問題。獲取當前月份生日清單表格僱員表

+3

你爲什麼要存儲的日期在非-ANSI標準格式? – Kermit

+3

以@ FreshPrinceOfSO的觀點來點贊。將日期存儲爲'date'數據類型,您將爲自己節省很多麻煩。 – 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

相關問題