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

PostgreSQL inverso MI PIACE

Il tuo caso semplice può essere risolto con una semplice query utilizzando ANY costruire e ~* :

SELECT *
FROM   tbl
WHERE  col ~* ANY (string_to_array('The ships hung in the sky ... bricks don’t', ' '));

~* è l'operatore di corrispondenza delle espressioni regolari senza distinzione tra maiuscole e minuscole. Lo uso invece di ILIKE così possiamo usare le parole originali nella tua stringa senza la necessità di riempire % per ILIKE . Il risultato è lo stesso, fatta eccezione per le parole che contengono caratteri speciali:%_\ per ILIKE e !$()*+.:<=>?[\]^{|}- per i modelli di espressioni regolari. Potrebbe essere necessario sfuggire ai caratteri speciali in entrambi i modi per evitare sorprese. Ecco una funzione per le espressioni regolari:

  • Funzione di escape per espressioni regolari o pattern LIKE

Ma ho dubbi assillanti che sarà tutto ciò di cui hai bisogno. Vedi il mio commento. Sospetto che tu abbia bisogno della ricerca di testo completo con un dizionario corrispondente alla tua lingua naturale per fornire un'utile derivazione delle parole ...

Correlati:

  • IN vs ANY operatore in PostgreSQL
  • Variazioni delle prestazioni delle query LIKE di PostgreSQL
  • Corrispondenza del modello con LIKE, SIMILAR TO o espressioni regolari in PostgreSQL