sql >> Database teknologi >  >> RDS >> PostgreSQL

Korrekt måde at tilføje uescaped tekst fra et felt til et regex i postgres?

Den nemmeste ting at gøre er at bruge et regex til at forberede din streng til at være i et regex. At undslippe ikke-ord-tegn i din streng burde være tilstrækkeligt til at gøre den regex-sikker, for eksempel:

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

Så noget som dette burde fungere generelt:

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

hvor x og y er de andre dele af regex.

Hvis du ikke havde brug for et regex i slutningen (dvs. ingen y ovenfor), så kan du bruge (?q) :

og en q betyder, at:

Så du kan bruge:

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

i dette begrænsede tilfælde.




  1. Import af CSV-data ved hjælp af PHP/MySQL

  2. apt-get installation af oracle java 7 holdt op med at virke

  3. Hvordan vælger jeg sidste 30 dages datoer i MySQL, selv om datoerne ikke er til stede i mysql?

  4. GET_FORMAT() Eksempler – MySQL