您可以在两个查询中进行更新或将其包装在存储过程中。
首先,更新end_date
人的当前。
UPDATE tableName
SET end_date = DATE_FORMAT(CURDATE(), '%d%b%Y')
ORDER BY STR_TO_DATE(start_date, '%d%b%Y') DESC
LIMIT 1
其次,插入新记录。
INSERT INTO tableName(employee_id, city, start_date, end_date)
VALUES('0123', 'Detroit', DATE_FORMAT(CURDATE(), '%d%b%Y'), '01Jan2099')
这是一个存储过程,
DELIMITER ;;
CREATE PROCEDURE EmployeeRecord
(
IN empID VARCHAR(15),
IN newLoc VARCHAR(30)
)
BEGIN
UPDATE tableName
SET end_date = DATE_FORMAT(CURDATE(), '%d%b%Y')
WHERE employee_id = empID
ORDER BY STR_TO_DATE(start_date, '%d%b%Y') DESC
LIMIT 1;
INSERT INTO tableName(employee_id, city, start_date, end_date)
VALUES(empID, newLoc, DATE_FORMAT(CURDATE(), '%d%b%Y'), '01Jan2099');
END ;;
DELIMITER ;
用法:
CALL EmployeeRecord('0123','Detroit')
作为旁注,请DATE or DATETIME
在存储日期时使用数据类型,以避免在字段上使用函数,如果有的话会杀死索引。