sql >> Databáze >  >> RDS >> PostgreSQL

Správný způsob, jak přidat neuvedený text z pole do regulárního výrazu v postgresu?

Nejjednodušší věc, kterou můžete udělat, je použít regulární výraz k přípravě řetězce tak, aby byl v regulárním výrazu. Escapování neslovních znaků v řetězci by mělo stačit, aby byl bezpečný pro regulární výraz, například:

=> select regexp_replace('. word * and µ{', E'([^\\w\\s])', E'\\\\\\1', 'g');
   regexp_replace   
--------------------
 \. word \* and µ\{

Takže něco takového by obecně mělo fungovat:

where some_text ~* x || regexp_replace(some_field, E'([^\\w\\s])', E'\\\\\\1', 'g') || y

kde x a y jsou ostatní části regulárního výrazu.

Pokud jste na konci nepotřebovali regulární výraz (tj. žádné y výše), pak můžete použít (?q) :

a q znamená, že:

Můžete tedy použít:

where some_text ~* x || '(?q)' || some_field

v tomto omezeném případě.




  1. kódování UTF8 neodpovídá národnímu prostředí en_US; zvolené nastavení LC_CTYPE vyžaduje kódování LATIN1

  2. Záznam android/php se nevkládá do mysql

  3. Co když spoušť selže?

  4. Jak se odpojit od databáze a vrátit se k výchozí databázi v PostgreSQL?