PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Правилен начин за добавяне на неекраниран текст от поле към регулярен израз в postgres?

Най-лесното нещо, което можете да направите, е да използвате регулярен израз, за ​​да подготвите своя низ да бъде в регулярен израз. Ескейпирането на знаци, които не са думи, във вашия низ трябва да е достатъчно, за да го направи безопасен за регулярен израз, например:

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

Така че нещо подобно трябва да работи като цяло:

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

където x и y са другите части на регулярния израз.

Ако нямате нужда от регулярен израз в края (т.е. без y по-горе), тогава можете да използвате (?q) :

и q означава, че:

Така че можете да използвате:

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

в този ограничен случай.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на анотация на Django Window в комбинация с различна клауза

  2. Свързване към RDS Postgres от отдалечена машина

  3. GREATEST() Функция в PostgreSQL

  4. CommandError:Изглежда, че нямате инсталирана програма 'psql' или на вашия път

  5. Функция PostgreSQL, връщаща множество набори от резултати