2010-04-03 9 views
62

Voici une structure de table (test par exemple):MySQL: Trier par taille du champ/longueur

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

Une requête comme:

SELECT * FROM TEST ORDER BY description DESC; 

Mais je voudrais commander par la taille du champ /longueur de la description du champ. Le type de champ sera TEXT ou BLOB.

Répondre

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

La fonction LENGTH donne la longueur de la chaîne en octets. Si vous voulez compter les caractères (multi-octets), utilisez la fonction CHAR_LENGTH à la place:

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

Juste pour ajouter à la réponse: si le type est BLOB, vous pouvez utiliser 'OCTET_LENGTH (nom_colonne)'. – mastazi

+0

@mastazi selon la documentation de MySQL: OCTET_LENGTH() est un synonyme de LENGTH(). – Heitor

+0

'CHAR_LENGTH' n'est pas un nom de fonction intégré reconnu. Je suis confronté à cette erreur – Anurag

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

'CHAR_LENGTH' n'est pas un nom de fonction intégré reconnu. Je suis confronté à cette erreur – Anurag

3

Pour ceux qui utilisent MS SQL

SELECT * FROM TEST ORDER BY LEN(field)