Recuperar la longitud máxima de una columna VARCHAR en SQL Server

88

Quiero encontrar el más largo VARCHARen una columna específica de una tabla de SQL Server.

He aquí un ejemplo:

ID = INT IDENTITY
DESC = VARCHAR(5000)

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

¿Cuál es el SQL para devolver 3? ¿Dado que el valor más largo es de 3 caracteres?

Milo LaMar
fuente

Respuestas:

167

Utilice las funciones integradas para longitud y máximo en la columna de descripción:

SELECT MAX(LEN(DESC)) FROM table_name;

Tenga en cuenta que si su mesa es muy grande, puede haber problemas de rendimiento.

asombro
fuente
Gracias, tuve un pedo cerebral y recordé la función LEN a mitad de la pregunta, pero pensé que sería bueno tenerla aquí de todos modos. ¡Gracias amigo!
Milo LaMar
17
Solo una nota, si desea saber el tamaño en lugar del número de caracteres, use DATALENGTH(ya que puede usar NVARCHARen algunos lugares, o algún día).
Aaron Bertrand
37

para mysql su longitud no es larga

SELECT MAX(LENGTH(Desc)) FROM table_name
Abhishek Goel
fuente
1
La misma función 'LENGTH' para postgresql también. (no 'LEN')
dimuthu
19

¡¡Cuidado!! Si hay espacios, no serán considerados por el método LEN en T-SQL. No dejes que esto te engañe y usa

select max(datalength(Desc)) from table_name
bevada
fuente
Buen punto. Actualmente, los varchars 'asd' y 'asd' son tratados de la misma manera por SQL Server (excepto en la cláusula LIKE). Para obtener más información, consulte: support.microsoft.com/en-us/help/316626/…
sotn
9

Para Oracle, también es LENGTH en lugar de LEN

SELECT MAX(LENGTH(Desc)) FROM table_name

Además, DESC es una palabra reservada. Aunque muchas palabras reservadas seguirán funcionando para nombres de columna en muchas circunstancias, es una mala práctica hacerlo y puede causar problemas en algunas circunstancias. Están reservados por una razón.

Si la palabra Desc solo se usaba como ejemplo, debería notarse que no todos se darán cuenta de eso, pero muchos se darán cuenta de que es una palabra reservada para Descendente. Personalmente, comencé usando esto y luego tratando de averiguar dónde iba el nombre de la columna porque todo lo que tenía eran palabras reservadas. No tomó mucho tiempo para resolverlo, pero téngalo en cuenta cuando decida qué sustituir por el nombre real de su columna.

codeguruinboise
fuente
6

Da el conteo máximo de registros en la tabla

select max(len(Description))from Table_Name

Da récord de tener mayor conteo

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

La esperanza ayuda a alguien.

shaijut
fuente
3
SELECT MAX(LEN(Desc)) as MaxLen FROM table
Milo LaMar
fuente
2

Para el servidor SQL (SSMS)

select MAX(LEN(ColumnName)) from table_name

Esto devolverá el número de caracteres.

 select MAX(DATALENGTH(ColumnName)) from table_name

Esto devolverá el número de bytes usados ​​/ requeridos.

SI alguien usa varchar entonces use DATALENGTH. Más detalles

MSTdev
fuente
1
SELECT TOP 1 column_name, LEN(column_name) AS Lenght FROM table_name ORDER BY LEN(column_name) DESC
Alexandru-Codrin Panaite
fuente
2
Si bien este fragmento de código puede ser la solución, incluir una explicación realmente ayuda a mejorar la calidad de su publicación. Recuerde que está respondiendo a la pregunta para los lectores en el futuro, y es posible que esas personas no conozcan los motivos de su sugerencia de código.
HMD
+1 por señalar que utilicé una palabra clave DESC de SQL Server como nombre de columna, que por alguna razón permite LOL
Milo LaMar
Ortografía correcta también puede ser crítico así como la lectura de este puede no darse cuenta 'Longitud' en la respuesta es en realidad un error tipográfico para 'longitud' (no es que si debe causar un error)
Jean-Claude DeMars
1

Muchas veces desea identificar la fila que tiene esa columna con la longitud más larga, especialmente si está solucionando problemas para averiguar por qué la longitud de una columna en una fila en una tabla es mucho más larga que cualquier otra fila, por ejemplo. Esta consulta le dará la opción de listar un identificador en la fila para identificar de qué fila es.

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

Para IBM Db2 su LONGITUD, no LENGTH:

SELECT MAX(LENGTH(Desc)) FROM table_name;
Shashank
fuente