sql >> Databáze >  >> RDS >> Mysql

MySQL - vytvoření uživatelem definované funkce pro vlastní řazení

Máte nějaké problémy s podřetězci a přetypování na int na konci způsobí řazení hodnot s více číslicemi na konci, nikoli podle roku. To by mělo fungovat lépe;

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 ;

To lze trochu zjednodušit na;

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. java.lang.AbstractMethodError:com.mysql.jdbc.PreparedStatement.setBlob(ILjava/io/InputStream;)V

  2. Jak získat hodnotu ASCII v Oracle?

  3. Závažná chyba:Nelze otevřít a zamknout tabulky oprávnění:Tabulka 'mysql.host' neexistuje

  4. MySql Cursor - Vytvoření procedury