PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Właściwy sposób na dodanie tekstu bez zmiany znaczenia z pola do wyrażenia regularnego w postgresie?

Najprostszą rzeczą do zrobienia jest użycie wyrażenia regularnego do przygotowania łańcucha do wyrażenia regularnego. Uciekanie znaków niebędących słowami w ciągu powinno wystarczyć, aby był on bezpieczny dla wyrażenia regularnego, na przykład:

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

Więc coś takiego powinno działać ogólnie:

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

gdzie x i y to pozostałe części wyrażenia regularnego.

Jeśli nie potrzebujesz wyrażenia regularnego na końcu (np. brak y powyżej), możesz użyć (?q) :

i q oznacza, że:

Możesz więc użyć:

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

w tym ograniczonym przypadku.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hibernate Distinct z zamówieniem według

  2. Używanie kolumny w sql join bez dodawania jej do klauzuli group by

  3. Eksportuj bazę danych Postgres do pliku CSV

  4. Maksymalna wartość rzędowa (z n kolumn) - Eleganckie podejście

  5. Jak automatycznie zaktualizować znacznik czasu w PostgreSQL?