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?

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.


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

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

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.


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.



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


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

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]

0

Para IBM Db2 su LONGITUD, no LENGTH:

SELECT MAX(LENGTH(Desc)) FROM table_name;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.