sql >> Databasteknik >  >> RDS >> Mysql

MySQL - skapa en användardefinierad funktion för en anpassad sortering

Du har några problem med dina delsträngar, och casten till int i slutet gör att den sorterar värden med fler siffror i slutet, inte efter år. Detta borde fungera bättre;

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 ;

Detta kan förenklas lite till;

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 ;



  1. Okänt kolumnfel i denna COUNT MySQL-sats?

  2. Kan jag parametrisera tabellnamnet i en förberedd sats?

  3. Hur SQRT() fungerar i MariaDB

  4. Hur deklarerar man lokala variabler i postgresql?