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

Selecionando parte de um campo com um regex


Esta resposta está obsoleta. MySql tem melhor suporte a regex.

Não, é triste dizer que o MySQL não tem como aplicar um regex ao conteúdo de uma coluna em uma cláusula SELECT, apenas uma cláusula WHERE.

Mas você pode usar funções de manipulação de string comuns (não regex) para fazer isso. Se a coluna que contém sua string de parâmetro separada por "e" comercial tiver o nome url , você pode obter o número de id com esta expressão de string fina, que encontra seu número de id.
  CAST(RIGHT(url, LENGTH(url) - 3 - LOCATE('&id=', url)) AS SIGNED INTEGER)

Então, se você quiser uma lista de id valores do url colunas de table1 , você pode usar este SELECT consulta.
SELECT CAST(RIGHT(url, LENGTH(url) - 3 - 
                       LOCATE('&id=', url)) AS SIGNED INTEGER) AS id
  FROM table1
 WHERE url REGEXP '&id=[0-9]+'

Como você pode ver, isso usa a função de pesquisa regexp para localizar as linhas apropriadas.

Não há nada de rápido nisso. A correspondência Regexp não pode explorar um índice MySQL. Se você tiver a opção de carregar sua tabela com a coluna id pré-extraída, será muito melhor pesquisar quando sua tabela ficar grande.