2010-04-03 18 views
62

Ecco una struttura della tabella (ad esempio, test):MySQL: Ordina per dimensione del campo/lunghezza

__________________________________________ 
| Field Name  | Data Type    |     
|________________|_________________________|     
| id   | BIGINT (20)   |     
|________________|_________________________|     
| title  | varchar(25)   |     
|________________|_________________________|     
| description | text     |     
|________________|_________________________|     

una query come:

SELECT * FROM TEST ORDER BY description DESC; 

ma vorrei ordinare dalle dimensioni campo/lunghezza della descrizione del campo. Il tipo di campo sarà TEXT o BLOB.

risposta

114
SELECT * FROM TEST ORDER BY LENGTH(description) DESC; 

La funzione LENGTH fornisce la lunghezza della stringa in byte. Se si desidera contare caratteri (multi-byte), utilizzare la funzione CHAR_LENGTH invece:

SELECT * FROM TEST ORDER BY CHAR_LENGTH(description) DESC; 
+2

Giusto per aggiungere alla risposta: se il tipo è BLOB, puoi usare 'OCTET_LENGTH (column_name)'. – mastazi

+0

@mastazi secondo la documentazione di MySQL: OCTET_LENGTH() è un sinonimo di LENGTH(). – Heitor

+0

'CHAR_LENGTH' non è un nome di funzione predefinito riconosciuto. Sto affrontando questo errore – Anurag

4
SELECT * FROM TEST ORDER BY CHAR_LENGTH(description); 
+0

'CHAR_LENGTH' non è un nome di funzione predefinito riconosciuto. Sto affrontando questo errore – Anurag

3

Per coloro che utilizzano MS SQL

SELECT * FROM TEST ORDER BY LEN(field)