2013-06-30 12 views
7

Ho una tabella in cui estraggo alcuni valori, i valori di una colonna possono contenere "valore1 | valore2 | valore3", ma voglio solo ottenere i caratteri prima del | - "valore1".MySQL ottiene tutti i caratteri prima del carattere specifico

Questo è quello che ho provato, ma non funziona .. Cosa sto facendo male? Grazie!

$ sql = "SELECT * LEFT ('Come', LOCATE ('|', 'Come') - 1) FROM $ tablename DOVE Parent = '0' AND Tipo LIKE 'top' ORDER BY Order ASC ";

voglio usare questo per tutti i valori, non solo un campo ..

risposta

10

è necessario la seguente dichiarazione per ottenere quella porzione di [ColName]:

LEFT([ColName],INSTR([ColName],"|")-1) 

Se si desidera selezionare più colonne nella stessa colonna di record è possibile l'unione tutte con qualcosa di simile a quanto segue:

SELECT LEFT(ColName,INSTR(ColName,"|")-1) AS FirstValue From $TableName; 
UNION ALL 
SELECT LEFT(ColName2,INSTR(ColName2,"|")-1) AS FirstValue From $TableName; 

Se si desidera per usarlo su più colonne, script la creazione di sql.

5

Due cose: (1) non si dispone di una virgola tra il * e l'espressione si sta cercando di fare con LEFT e (2) si è messa like tra virgolette, in modo che le funzioni stanno lavorando sul valore costante like invece della colonna denominata like. Prova a inserire like nei backtick.

SELECT *, LEFT(`Like`, LOCATE('|', `Like`)-1) 
... 

È inoltre possibile utilizzare la funzione di MySQL SUBSTRING_INDEX per questo:

SELECT *, SUBSTRING_INDEX(`Like`, '|', 1) 
... 
+0

Grazie, come la soluzione SUBSTRING_INDEX altro – zhihong

0

Penso che ci sia un modo semplice:

strSplit(ColName,'|',1) 

Ho ragione?

Problemi correlati