• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

218
Vistas
Extraiga filas si hay / hay 'n' palabra / s antes o después de un patrón en postgres 11

Tengo la siguiente tabla en postgres.

 col1 col2 col3 NCT00000412 Drug Placebo Calcitriol NCT00000412 Drug Placebo Alendronate NCT00000774 Biological Placebo version of rgp120/HIV-1MN NCT00000774 Biological Placebo version of rgp120/HIV-1SF2 NCT00005648 Drug Gemcitabine with Placebo NCT00007631 Drug Tretinoin 0.1% cream or placebo NCT00007735 Drug Doxycycline (200mg/day) or Placebo NCT00032435 Drug PAL-40 Placebo NCT00032435 Drug abciximab placebo; reteplase placebo, abciximab NCT00032435 Drug Valsartan placebo + nateglinide placebo

Estoy tratando de extraer esas filas donde la palabra placebo tiene una sola palabra antes o después. La salida esperada es:

 col1 col2 col3 NCT00000412 Drug Placebo Calcitriol NCT00000412 Drug Placebo Alendronate NCT00032435 Drug PAL-40 Placebo

He intentado siguiendo expresiones regulares:

 select * from table where name ~* '\splacebo\w+' or name ~* '\w+placebo\s'
about 3 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puedes utilizar

 select * from table where name ~* '^(?:placebo\s+\S+|\S+\s+placebo)$'

Vea la demostración de expresiones regulares

Detalles

  • ^ - comienzo de la cadena
  • (?:placebo\s+\S+|\S+\s+placebo) - un grupo sin captura que coincide con
    • placebo\s+\S+ - placebo , luego 1+ espacios en blanco y luego 1+ espacios que no son en blanco
    • | - o
    • \S+\s+placebo - 1+ espacios sin espacios en blanco, luego 1+ espacios en blanco y luego placebo
  • $ - final de la cadena.
about 3 years ago · Santiago Trujillo Denunciar

0

Creo que quieres:

 where col3 ~* '(^\S+\s+placebo)|(placebo\s+\S+$)'

Desglose:

 ( ^ beginning of the string \S+ 1 to N characters other than a space \s+ 1 to N spaces placebo literal string "placebo" ) | OR ( placebo literal string "placebo" \s+ 1 to N spaces \S+ 1 to N characters other than a space $ end of the string )

Usé \S en lugar de \w porque quieres hacer coincidir los guiones (lo que \w no hace).

about 3 years ago · Santiago Trujillo Denunciar

0

Como nota, puedes hacer esto simplemente usando like :

 where (name like '% Placebo%' and name not like '% % Placebo%') or (name like '%Placebo %' and name not like '%Placebo % %')
about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda