Récupérer la longueur maximale d'une colonne VARCHAR dans SQL Server


87

Je veux trouver le plus long VARCHARdans une colonne spécifique d'une table SQL Server.

Voici un exemple:

ID = INT IDENTITY
DESC = VARCHAR(5000)

ID | Desc
---|-----
1  | a
2  | aaa
3  | aa

Quel est le SQL pour retourner 3? Puisque la valeur la plus longue est de 3 caractères?

Réponses:


166

Utilisez les fonctions intégrées pour la longueur et le maximum dans la colonne de description:

SELECT MAX(LEN(DESC)) FROM table_name;

Notez que si votre table est très volumineuse, il peut y avoir des problèmes de performances.


Merci, j'ai eu un pet dans le cerveau et je me suis souvenu de la question du milieu de la fonction LEN, mais j'ai pensé que ce serait peut-être bon d'avoir ici de toute façon. Merci mon pote!
Milo LaMar

17
Juste une note, si vous voulez connaître la taille par opposition au nombre de caractères, utilisez DATALENGTH(puisque vous pouvez utiliser NVARCHARà certains endroits, ou un jour).
Aaron Bertrand

37

pour mysql sa longueur n'est pas len

SELECT MAX(LENGTH(Desc)) FROM table_name

1
Même fonction 'LENGTH' pour postgresql également. (pas 'LEN')
dimuthu

19

Fais attention!! S'il y a des espaces, ils ne seront pas pris en compte par la méthode LEN dans T-SQL. Ne vous laissez pas tromper et utilisez

select max(datalength(Desc)) from table_name

Bon point. En fait, les varchars 'asd' et 'asd' sont traités de la même manière par SQL Server (sauf dans la clause LIKE). Pour plus de détails, consultez: support.microsoft.com/en-us/help/316626/…
sotn

9

Pour Oracle, c'est aussi LENGTH au lieu de LEN

SELECT MAX(LENGTH(Desc)) FROM table_name

De plus, DESC est un mot réservé. Bien que de nombreux mots réservés fonctionnent toujours pour les noms de colonnes dans de nombreuses circonstances, il est déconseillé de le faire et peut entraîner des problèmes dans certaines circonstances. Ils sont réservés pour une raison.

Si le mot Desc n'était utilisé qu'à titre d'exemple, il convient de noter que tout le monde ne s'en rendra pas compte, mais que beaucoup se rendront compte que c'est un mot réservé pour Descendant. Personnellement, j'ai commencé par utiliser ceci, puis j'ai essayé de comprendre où allait le nom de la colonne parce que je n'avais que des mots réservés. Il n'a pas fallu longtemps pour le comprendre, mais gardez cela à l'esprit lorsque vous décidez quoi remplacer votre nom de colonne réel.


6

Donne le nombre maximal d'enregistrements dans la table

select max(len(Description))from Table_Name

Donne un record avec un plus grand nombre

select Description from Table_Name group by Description having max(len(Description)) >27

L'espoir aide quelqu'un.



2

Pour le serveur SQL (SSMS)

select MAX(LEN(ColumnName)) from table_name

Cela renverra le nombre de caractères.

 select MAX(DATALENGTH(ColumnName)) from table_name

Cela retournera le nombre d'octets utilisés / requis.

SI quelqu'un utilise varchar alors utilisez DATALENGTH. Plus de détails


1
SELECT TOP 1 column_name, LEN(column_name) AS Lenght FROM table_name ORDER BY LEN(column_name) DESC

2
Bien que cet extrait de code puisse être la solution, inclure une explication contribue vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question aux lecteurs à l'avenir, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.
HMD

+1 pour avoir souligné que j'ai utilisé un mot-clé SQL Server DESC comme nom de colonne, ce qu'il permet pour une raison quelconque LOL
Milo LaMar

Une orthographe correcte peut également être critique car certaines lectures peuvent ne pas se rendre compte que `` Longueur '' dans la réponse est en fait une faute de frappe pour `` longueur '' (pas que si cela devrait causer une erreur)
Jean-Claude DeMars

1

Plusieurs fois, vous voulez identifier la ligne qui a cette colonne avec la longueur la plus longue, surtout si vous dépannez pour savoir pourquoi la longueur d'une colonne sur une ligne dans un tableau est tellement plus longue que toute autre ligne, par exemple. Cette requête vous donnera la possibilité de lister un identifiant sur la ligne afin d'identifier de quelle ligne il s'agit.

select ID, [description], len([description]) as descriptionlength
FROM [database1].[dbo].[table1]
where len([description]) = 
 (select max(len([description]))
  FROM [database1].[dbo].[table1]

0

Pour IBM Db2 sa LENGTH, pas LEN:

SELECT MAX(LENGTH(Desc)) FROM table_name;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.