Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Coluna de indexação com a função REPLACE no mySQL


Não existe coluna calculada em MySQL.

Se você quiser formatar algum valor para acelerar a pesquisa de índice, provavelmente terá que usar algum gatilho. Na verdade, respondi quase a mesma pergunta esta manhã:veja https://stackoverflow.com /a/18047511/2363712 para um exemplo semelhante.

No seu caso, isso levaria a algo assim:
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, '-', '');

Agora você usará column_1_fmt para pesquisar valores/juntar valores com o formato necessário.

Em relação ao seu necessidade especial (removendo traços -- de algum tipo de número de série/referência?). Talvez você deva reverter o problema. Armazene esses valores como forma canônica (sem traço). E adicione os traços necessários em SELECT Tempo.