Recupere o comprimento máximo de uma coluna VARCHAR no SQL Server


88

Eu quero encontrar o mais longo VARCHARem uma coluna específica de uma tabela do SQL Server.

Aqui está um exemplo:

ID = INT IDENTITY
DESC = VARCHAR(5000)

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

Qual é o SQL para retornar 3? Já que o maior valor tem 3 caracteres?

Respostas:


167

Use as funções integradas para comprimento e máximo na coluna de descrição:

SELECT MAX(LEN(DESC)) FROM table_name;

Observe que, se sua tabela for muito grande, pode haver problemas de desempenho.


Obrigado, tive um peido cerebral e lembrei-me da pergunta do meio da função LEN, mas achei que seria bom tê-la aqui de qualquer maneira. Obrigado cara!
Milo LaMar

17
Apenas uma nota, se você quiser saber o tamanho em oposição ao número de caracteres, use DATALENGTH(já que você pode usar NVARCHARem alguns lugares, ou algum dia).
Aaron Bertrand

37

para mysql seu comprimento não é len

SELECT MAX(LENGTH(Desc)) FROM table_name

1
A mesma função 'LENGTH' para postgresql também. (não 'LEN')
dimuthu

19

Cuidado!! Se houver espaços, eles não serão considerados pelo método LEN no T-SQL. Não deixe isso enganar você e usar

select max(datalength(Desc)) from table_name

Bom ponto. Na verdade, os varchars 'asd' e 'asd' são tratados da mesma forma pelo SQL Server (exceto na cláusula LIKE). Para obter detalhes, verifique: support.microsoft.com/en-us/help/316626/…
sotn,

9

Para Oracle, também é LENGTH em vez de LEN

SELECT MAX(LENGTH(Desc)) FROM table_name

Além disso, DESC é uma palavra reservada. Embora muitas palavras reservadas ainda funcionem para nomes de coluna em muitas circunstâncias, é uma prática inadequada fazer isso e pode causar problemas em algumas circunstâncias. Eles são reservados por um motivo.

Se a palavra Desc estava sendo usada apenas como exemplo, deve-se notar que nem todos perceberão isso, mas muitos perceberão que é uma palavra reservada para Descendente. Pessoalmente, comecei usando isso e depois tentando descobrir para onde ia o nome da coluna porque tudo o que tinha eram palavras reservadas. Não demorou muito para descobrir, mas tenha isso em mente ao decidir o que substituir pelo nome real da coluna.


6

Fornece a contagem máxima de registros na tabela

select max(len(Description))from Table_Name

Dá Recorde Com Maior Contagem

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

A esperança ajuda alguém.



2

Para servidor sql (SSMS)

select MAX(LEN(ColumnName)) from table_name

Isso retornará o número de caracteres.

 select MAX(DATALENGTH(ColumnName)) from table_name

Isso retornará o número de bytes usados ​​/ necessários.

SE alguém usar varchar, use DATALENGTH. Mais detalhes


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

2
Embora este trecho de código possa ser a solução, incluir uma explicação realmente ajuda a melhorar a qualidade de sua postagem. Lembre-se de que você responderá à pergunta para leitores no futuro, e essas pessoas podem não saber os motivos de sua sugestão de código.
HMD

+1 para apontar que usei uma palavra-chave DESC do SQL Server como um nome de coluna, o que permite por algum motivo LOL
Milo LaMar

A grafia correta também pode ser crítica, pois algumas leituras podem não perceber que 'Comprimento' na resposta é na verdade um erro de digitação para 'comprimento' (não que deva causar um erro)
Jean-Claude DeMars

1

Muitas vezes você deseja identificar a linha que tem aquela coluna com o comprimento mais longo, especialmente se você estiver solucionando problemas para descobrir por que o comprimento de uma coluna em uma linha em uma tabela é muito maior do que qualquer outra linha, por exemplo. Esta consulta lhe dará a opção de listar um identificador na linha para identificar em qual linha ele é.

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 é COMPRIMENTO, não LEN:

SELECT MAX(LENGTH(Desc)) FROM table_name;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.