Eu tenho a seguinte situação. Eu tenho que substring expressão regular da descrição usando o MySQL. Descrição:
Lorem D9801 ipsum dolor sit amet
Onde D9801 é REGEXP. Toda descrição de texto forte tem conteúdo diferente, mas meu regexp deve se parecer com: REGEXP 'D [[: digit:]] {4}'
REGEXP sempre tem "D" no início e "xxxx" - 4 dígitos no final: Dxxxx
Eu sei que o REGEXP retorna apenas valor verdadeiro / falso, mas como posso fazer uma consulta para retornar apenas o valor 'D9801'?
Eu tentei algo assim:
SELECT SUBSTRING (description, LOCATE(REGEXP 'D[[:digit:]]{4}', description), 5)
FROM (
SELECT "Lorem D9801 ipsum dolor sit amet" AS description
) temp
Eu sei que está errado, então eu tento com isso:
SELECT
id,
SUM(description REGEXP 'D[[:digit:]]{4}') AS matches,
CASE
WHEN (SUM(description REGEXP 'D[[:digit:]]{4}') > 0) THEN
SUBSTRING(description, LOCATE( /*POSITION_OF_REGEXP_IN_DESC*/ , description), 5)
ELSE 'Brak schematu'
END AS show_substr FROM ps_description GROUP BY id;
Mas como encontrar a posição do regexp?
Ouvi falar em UDF, mas não posso usá-lo, uso hospedagem OVH.
mysql
regular-expression
Marek Andrzejak
fonte
fonte
Respostas:
Isso precisaria usar a sintaxe
LOCATE
eSUBSTRING
para obter as informações da string. A sintaxe básica de localização que você precisa é explicada aqui .LOCATE (pesquisa str, str, [posição])
Enquanto a função de substring necessária é explicada aqui
SUBSTRING (str, pos, len)
A maneira mais fácil de visualizar isso é pensar em substring como a seguinte SUBSTRING (str FROM pos FOR len)
A sintaxe que eu usei para obter a segunda palavra está abaixo, aproveitei os espaços que estão constantemente ao redor da segunda palavra que você está tentando extrair.
fonte
Infelizmente, a função de expressão regular do MySQL retorna true, false ou null, dependendo da expressão existir ou não.
O truque para efetuar o comportamento desejado é determinar qual substring começa com o caractere de seu interesse, tem o tamanho correto e é seguido por um número. Uma série de funções substring_index são usadas para extrair a string ...
fonte