【发布时间】:2016-06-10 06:44:17
【问题描述】:
我有一个指定所有员工的表格。每当角色发生变化时,都会有新条目。喜欢
'先生。 Engg'- 开始日期 2013-04-01 和结束日期 2016-03-31
现在同一个人升职了
'Lead Engg' - 开始日期 2016-04-01 和结束日期'0000-00-00'
因为我不知道这个角色的结束日期。
我正在使用这张表在工资单中显示它。所以当他想要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 INTO `simpayroll`.`role`
(`id`,
`employee`,
`role`,
`startdate`,
`enddate`)
VALUES
(<{id: }>,
<{employee: }>,
<{role: }>,
<{startdate: }>,
<{enddate: }>);
【问题讨论】:
-
未知的结束日期不会简单地为 NULL 吗?在这种情况下,您可以使用 COALESCE(enddate,CURDATE())。
-
我将默认值设置为空,但是当我离开时它仍然在插入时显示错误。所以我用'0000-00-00'
-
显示什么错误?
-
不正确的日期值:第 1 行的列 'enddate' 为 'NULL'
-
我们能看到插入语句和创建表语句吗?
标签: mysql