sql >> Database >  >> RDS >> Mysql

MySQL - een door de gebruiker gedefinieerde functie maken voor een aangepaste sortering

Je hebt wat problemen met je substrings, en de cast naar int aan het einde zorgt ervoor dat het waarden sorteert met meer cijfers aan het einde, niet op jaar. Dit zou beter moeten werken;

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 ;

Dit kan een beetje worden vereenvoudigd tot;

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. SequelizeConnectionError:zelfondertekend certificaat

  2. Servicegroepwijzigingen in R12.2

  3. Hoe current_timestamp() werkt in PostgreSQL

  4. SQL Server Bulk Insert – Deel 1