sql >> Base de Datos >  >> RDS >> Mysql

Columna de indexación con función REEMPLAZAR en mySQL

No existe tal cosa como columna calculada en MySQL.

Si desea formatear algún valor para acelerar la búsqueda de índice, probablemente tendrá que usar algún disparador. De hecho, respondí casi la misma pregunta esta mañana:vea https://stackoverflow.com /a/18047511/2363712 para un ejemplo similar.

En su caso, eso conduciría a algo así:

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, '-', '');

Ahora usará column_1_fmt para buscar valores/unirse a valores que tengan el formato requerido.

Con respecto a su necesidad especial (quitando guiones -- ¿De algún tipo de número de serie/referencia?). Tal vez deberías revertir el problema. Almacene esos valores como forma canónica (sin guión). Y agregue los guiones requeridos en SELECT tiempo.