Tengo la siguiente tabla en Postres
col1 A02BX A02BX Other drugs for peptic ulcer and gastro-oesophageal reflux disease (GORD); A03AE Serotonin receptor antagonistsMe gustaría buscar una subcadena que sea una combinación de letras y números como 'A02BX'. La salida deseada es:
col1 A02BX A02BX | A03AENo puedo encontrar ninguna solución a esto. Aunque intenté buscar una cadena alfanumérica usando el siguiente patrón. Pero está haciendo coincidir toda la cadena.
[a-zA-Z0-9]+El resultado que obtengo es el mismo que el de la tabla inicial:
A02BX A02BX Other drugs for peptic ulcer and gastro-oesophageal reflux disease (GORD); A03AE Serotonin receptor antagonistsPuede extraer todas las coincidencias usando REGEXP_MATCHES y una expresión regular que coincida con las subcadenas alfanuméricas entre los límites de las palabras que contienen al menos una letra y al menos un dígito:
SELECT REGEXP_MATCHES( 'A02BX Other drugs for peptic ulcer and gastro-oesophageal reflux disease (GORD); A03AE Serotonin receptor antagonists', '\y(?:[AZ]+\d|\d+[AZ])[A-Z0-9]*\y', 'g')Ver un SQLFiddle .
Detalles
\y - un límite de palabra(?:[AZ]+\d|\d+[AZ]) - ya sea 1+ letras y un dígito o 1+ dígitos y luego una letra[A-Z0-9]* - 0 o más letras o dígitos\y - un límite de palabra.Otra solución:
select * from t; col1 ----------------------------------------------------------------------------------------------------------------------- A02BX A02BX Other drugs for peptic ulcer and gastro-oesophageal reflux disease (GORD); A03AE Serotonin receptor antagonists (2 rows) select col1, regexp_matches(col1, '(\w\d\d\w\w)+', 'g') from t; col1 | regexp_matches -----------------------------------------------------------------------------------------------------------------------+---------------- A02BX | {A02BX} A02BX Other drugs for peptic ulcer and gastro-oesophageal reflux disease (GORD); A03AE Serotonin receptor antagonists | {A02BX} A02BX Other drugs for peptic ulcer and gastro-oesophageal reflux disease (GORD); A03AE Serotonin receptor antagonists | {A03AE}