我有一個表指定負責所有employees.In,每當角色得到改變,新的條目將there.Like月,年中beween兩個日期當一個日期爲null
「老Engg'-開始日期2013年4月1日和結束日期2016年3月31日
現在一樣的傢伙得到提升到
「引領工程證書」 - 開始日期2016年4月1日和結束日期'0000-00-00'
因爲我不知道這個現在角色的結束日期。
我正在使用此表在Payslip中顯示它。所以當他想要March 2016
的工資單時,他的工資單應該顯示他的角色Sr Engg
當他想要Apr 2016
時,那麼角色應該是'Lead Engg'。
即時消息使用一個查詢,但它不起作用。
id empid role startdate enddate
1 1 Sr Engineer 2013-04-01 2016-03-31
3 2 Asst.Manager 2013-04-01 2016-03-31
2 1 Lead Engg 2016-04-01 0000-00-00
4 2 Manager 2016-04-01 0000-00-00
SELECT * FROM ROLE
WHERE EMPLOYEE = 1
AND ('2016-03' between DATE_FORMAT(STARTDATE,"%Y-%m") AND DATE_FORMAT(ENDDATE,"%Y-%m"));
其返回記錄employee = 1
,mar 2016
,但對於同一員工apr 2016
,它不返回任何東西。
創建聲明:
CREATE TABLE `role` (
`id` int(11) NOT NULL,
`employee` bigint(20) DEFAULT NULL,
`role` varchar(45) DEFAULT NULL,
`startdate` date DEFAULT NULL,
`enddate` date DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `Fk_role_employee_idx` (`employee`),
CONSTRAINT `Fk_role_employee` FOREIGN KEY (`employee`) REFERENCES `employee` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Insert語句:
INSERT INTO `simpayroll`.`role`
(`id`,
`employee`,
`role`,
`startdate`,
`enddate`)
VALUES
(<{id: }>,
<{employee: }>,
<{role: }>,
<{startdate: }>,
<{enddate: }>);
難道不是一個未知的結束日期僅僅是NULL?在這種情況下,您可以使用COALESCE(enddate,CURDATE())。 – Strawberry
我設置默認值爲空,但仍然當我離開,它顯示插入時的錯誤。所以我用'0000-00-00' – Anu
它顯示什麼錯誤? – Strawberry