Domanda

È possibile ordinare una colonna in ordine alfabetico ma ignorando alcune parole come ad esempio "The"

per es.

Una normale query restituisce

string 1
string 3
string 4
the string 2

Vorrei tornare

string 1
the string 2
string 3
string 4

È possibile?

Modifica Si prega di notare che sto cercando di sostituire più parole come The, A, ecc ... È possibile farlo?

È stato utile?

Soluzione

Puoi provare

SELECT id, text FROM table ORDER BY TRIM(REPLACE(LOWER(text), 'the ', ''))

ma nota che sarà molto lento per set di dati di grandi dimensioni in quanto deve ricalcolare la nuova stringa per ogni riga

IMO stai meglio con una colonna separata con un indice su di essa.

Per più password basta continuare a annidare le chiamate REPLACE . :)

Altri suggerimenti

Questo sostituirà tutti i principali " Il " come esempio

SELECT  *
FROM    YourTable 
ORDER BY REPLACE(Val,'The ', '')

Sì, dovrebbe essere possibile usare espressioni con la parte ORDER:

SELECT * FROM yourTable ORDER BY REPLACE(yourField, "the ", "")

Ho un elenco musicale di oltre 75.000 dischi e ho riscontrato una situazione simile. Ho scritto uno script PHP che ha cercato tutte le stringhe che iniziavano con 'A', 'An' o 'The' e ho troncato quella parte della stringa. Ho anche convertito tutte le lettere maiuscole in minuscole e memorizzato quella stringa in una nuova colonna. Dopo aver impostato un indice su quella colonna, ho finito.

Ovviamente si visualizza la colonna iniziale ma si ordina per la colonna indicizzata appena creata. Ottengo risultati tra circa un secondo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top