7

Sto usando Ruby on Rails e pg_search gem per la funzione di ricerca full-text utilizzando il database PostgreSQL nel mio progetto. Attualmente, ho una lista degli ospedali con nome simile:come cercare e ordinare i dati ma escludere parole di prefisso in sql

Hospital A 
Hospital C 
Hospital D 
Hospital B A 

Quando faccio ricerca, vorrei la parola Hospital non influisce ai risultati restituiti ed i risultati possono essere ordinati senza Hospital prefisso.

Esempio se entro Hospital nel campo query, non ci sarà non hanno restituito risultati, ma se entro A, Hospital A e Hospital B A saranno i risultati, allora i risultati possono essere ordinati per alfabetico, senza Hospital parola prefisso di diventare un elenco:

Hospital A 
Hospital B A 

ho fatto una ricerca su questo e hanno trovato this answer: Advanced MySQL Alphabetical Sort with Prefix?, ma la risposta utilizzando un punto di vista che io non so come farlo in Rails.

Non sono sicuro che pg_search gem supporti SUBSTRING in quanto non ho trovato alcun documento al suo github. Qualcuno sa se Postgres ha caratteristiche per fare questo tipo di lavoro o no?

Grazie per qualsiasi aiuto.

Aggiornamento: Ho finito per utilizzare una colonna per memorizzare questa parola di prefisso in modo da poter cercare il contenuto ed escludere quella parola dalla query e restituire i risultati previsti. Per chiunque si trovi ad affrontare questo problema, ti preghiamo di prendere in considerazione e provare la mia soluzione se può salvarti.

+0

Se stai usando ricerca a testo integrale di PostgreSQL, aggiungere "Ospedale" come una parola di arresto. –

risposta

1

È possibile tagliare il prefisso. Indicato qui con il prefisso "Ospedale". Perché non sembra che tu voglia lo spazio dopo il prefisso che ho aggiunto 1 per saltarlo. Ovviamente puoi anche inserire il numero se è sempre lo stesso. Per dividere tutto fino al primo spazio, puoi usare regex. Il trucco è creare un tavolo temporaneo in cui aggiungi tutto come ne hai bisogno e poi ne scegli comodamente da esso. Se il prefisso sta cambiando, potresti voler limitare la selezione interna al nome WHERE LIKE 'Hospital%'.

SELECT 
    name 
FROM (
    SELECT 
     SUBSTR(name, LENGTH('Hospital') + 1) AS name 
    FROM 
     hospital 
    ) AS T 
WHERE 
    name LIKE '%A%' 
ORDER BY 
    name 
; 

SQL fiddle

Problemi correlati