Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL - Erstellen einer benutzerdefinierten Funktion für eine benutzerdefinierte Sortierung

Sie haben einige Probleme mit Ihren Teilzeichenfolgen, und die Umwandlung in int am Ende bewirkt, dass Werte mit mehr Ziffern am Ende sortiert werden, nicht nach Jahr. Das sollte besser funktionieren;

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 ;

Dies kann etwas vereinfacht werden zu;

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 ;