您的子字符串有一些问题,并且强制转换为int使其在末尾而不是按年对具有更多数字的值进行排序。这应该更好地工作;
DELIMITER //CREATE FUNCTION custom_sort(id VARCHAr(8)) RETURNS VARCHAr(10) READS SQL DATA DETERMINISTIC BEGIN DECLARE year VARCHAr(2); DECLARE balance VARCHAr(6); DECLARE stringValue VARCHAr(10); SET year = SUBSTRINg(id, 1, 2); SET balance = SUBSTRINg(id, 3, 6); IF(year <= 96) THEN SET stringValue = CONCAt('20', year, balance); ELSE SET stringValue = CONCAt('19', year, balance); END IF; RETURN stringValue; END//DELIMITER ;这可以简化为;
DELIMITER //CREATE FUNCTION custom_sort(id VARCHAr(8)) RETURNS varchar(10) DETERMINISTIC BEGIN IF(SUBSTRINg(id, 1, 2) <= '96') THEN RETURN CONCAt('20', id); ELSE RETURN CONCAt('19', id); END IF; END//DELIMITER ;


