Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL - tworzenie funkcji zdefiniowanej przez użytkownika dla niestandardowego sortowania

Masz pewne problemy z podciągami, a rzutowanie na int na końcu powoduje, że sortuje wartości z większą liczbą cyfr na końcu, a nie według roku. To powinno działać lepiej;

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 ;

Można to nieco uprościć;

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Plik binarny MySQL przeciwko niebinarnym dla identyfikatorów hash

  2. Limit MySQL ze zmienną

  3. używać PHP do tworzenia tabeli HTML z zapytania MSQL, bez zduplikowanych wierszy?

  4. MySQL — rekursywna struktura drzewa

  5. Zautomatyzuj mysql_secure_installation za pomocą polecenia echo za pomocą skryptu powłoki