sql >> Database teknologi >  >> RDS >> Mysql

MySQL - oprettelse af en brugerdefineret funktion til en brugerdefineret sortering

Du har nogle problemer med dine understrenge, og cast til int i slutningen gør, at den sorterer værdier med flere cifre i slutningen, ikke efter år. Dette burde fungere bedre;

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 ;

Dette kan forenkles en smule til;

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. Hvordan kan jeg optimere MySQL's ORDER BY RAND() funktion?

  2. Sådan fungerer Cos() i PostgreSQL

  3. Hvordan finder jeg ud af min root MySQL-adgangskode?

  4. MySQL-datatypekonvertering fra varchar til float