sql >> Databasteknik >  >> RDS >> PostgreSQL

Rätt sätt att lägga till oescaped text från ett fält till ett regex i postgres?

Det enklaste du kan göra är att använda ett regex för att förbereda din sträng för att vara i ett regex. Escapende tecken som inte är ord i din sträng bör vara tillräckligt för att göra den regex-säker, till exempel:

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

Så något sådant här borde fungera generellt:

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

där x och y är de andra delarna av det regex.

Om du inte behövde ett regex i slutet (dvs ingen y ovan), då kan du använda (?q) :

och en q betyder att:

Så du kan använda:

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

i detta begränsade fall.




  1. Dela en kolumn till flera kolumner men data kommer att variera SQL

  2. Oracle Joins - Jämförelse mellan konventionell syntax VS ANSI-syntax

  3. Grunderna i SQL Server Task Automation

  4. Gruppera efter ska returnera 0 vid gruppering efter timmar. Hur gor man det har?