我有一个表指定负责所有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