Mysql
 sql >> Base de données >  >> RDS >> Mysql

Colonne d'indexation avec la fonction REPLACE dans mySQL

Il n'existe pas de colonne calculée dans MySQL.

Si vous souhaitez formater une valeur pour accélérer la recherche d'index, vous devrez probablement utiliser un déclencheur. En fait, j'ai répondu à peu près à la même question ce matin :voir https://stackoverflow.com /a/18047511/2363712 pour un exemple similaire.

Dans votre cas, cela conduirait à quelque chose comme ça :

CREATE TABLE `table_a`(`column_1` VARCHAR(255), ... ,
                       `column_1_fmt` VARCHAR(255),
                       INDEX(`column_1_fmt`));

CREATE TRIGGER ins_table_a BEFORE INSERT ON `table_a`
FOR EACH ROW
    SET NEW.`column_1_fmt` = REPLACE(NEW.column_1, '-', '');

CREATE TRIGGER upd_table_a BEFORE UPDATE ON `table_a`
FOR EACH ROW
    SET NEW.`column_1_fmt` = REPLACE(NEW.column_1, '-', '');

Vous allez maintenant utiliser column_1_fmt pour rechercher des valeurs/joindre des valeurs ayant le format requis.

Concernant votre besoin spécial (suppression des tirets -- d'une sorte de numéro de série/de référence ?). Peut-être devriez-vous inverser le problème. Stockez ces valeurs sous forme canonique (pas de tiret). Et ajoutez les tirets requis à SELECT temps.