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

? LIKE (coluna || '%')


A pergunta:
SELECT * FROM table WHERE ? LIKE (col || '%');

pode ser reescrito como (Postgres e MySQL):
SELECT * FROM table WHERE col = left(?, length(col));

Conforme comentado, o primeiro formulário também deve funcionar. Mas pode ser complicado porque personagens com significado especial para LIKE (pelo menos _%\ ) na coluna teria que ser escapado. Se você quiser que funcione com MySQL e Postgres, você terá que observar caracteres especiais em ambas as implementações. Portanto, a segunda forma é muito menos propensa a erros no principal.

Desempenho


Nenhuma dessas consultas pode usar um índice em col , ambos não são sargable . O problema pode ser reavaliado como encontrar todos os prefixos possíveis para o padrão de pesquisa fornecido ? , que pode ser otimizado de maneira semelhante, como nesta resposta relacionada (para Postgres) no dba.SE: