Recupera la lunghezza massima di una colonna VARCHAR in SQL Server


90

Voglio trovare il più lungo VARCHARin una colonna specifica di una tabella di SQL Server.

Ecco un esempio:

ID = INT IDENTITY
DESC = VARCHAR(5000)

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

Qual è l'SQL per restituire 3? Dato che il valore più lungo è di 3 caratteri?

Risposte:


170

Usa le funzioni integrate per lunghezza e max nella colonna della descrizione:

SELECT MAX(LEN(DESC)) FROM table_name;

Nota che se la tua tabella è molto grande, potrebbero esserci problemi di prestazioni.


Grazie, ho avuto una scoreggia cerebrale e mi sono ricordato della funzione LEN a metà domanda, ma ho pensato che sarebbe stato bello averlo comunque. Grazie compagno!
Milo LaMar

17
Solo una nota, se vuoi conoscere le dimensioni rispetto al numero di caratteri, usa DATALENGTH(poiché potresti usare NVARCHARin alcuni posti, o un giorno).
Aaron Bertrand

37

per mysql la sua lunghezza non è len

SELECT MAX(LENGTH(Desc)) FROM table_name

1
Stessa funzione 'LENGTH' anche per postgresql. (non 'LEN')
dimuthu

19

Attento!! Se sono presenti spazi, non verranno considerati dal metodo LEN in T-SQL. Non lasciarti ingannare e usare

select max(datalength(Desc)) from table_name

Buon punto. In realtà i varchar "asd" e "asd" sono trattati allo stesso modo da SQL Server (tranne nella clausola LIKE). Per i dettagli controllare: support.microsoft.com/en-us/help/316626/…
sotn

9

Per Oracle, è anche LENGTH invece di LEN

SELECT MAX(LENGTH(Desc)) FROM table_name

Inoltre, DESC è una parola riservata. Sebbene molte parole riservate funzionino ancora per i nomi di colonna in molte circostanze, è una cattiva pratica farlo e può causare problemi in alcune circostanze. Sono riservati per un motivo.

Se la parola Desc è stata usata solo come esempio, va notato che non tutti lo capiranno, ma molti si renderanno conto che è una parola riservata per Descending. Personalmente, ho iniziato usando questo, e poi ho cercato di capire dove andasse il nome della colonna perché tutto quello che avevo erano parole riservate. Non ci è voluto molto per capirlo, ma tienilo a mente quando decidi cosa sostituire per il nome effettivo della colonna.


7

Fornisce il numero massimo di record nella tabella

select max(len(Description))from Table_Name

Dà record avendo un conteggio maggiore

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

La speranza aiuta qualcuno.



2

Per sql server (SSMS)

select MAX(LEN(ColumnName)) from table_name

Questo restituirà il numero di caratteri.

 select MAX(DATALENGTH(ColumnName)) from table_name

Ciò restituirà il numero di byte utilizzati / richiesti.

SE qualcuno usa varchar, allora usa DATALENGTH. Più dettagli


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

2
Sebbene questo snippet di codice possa essere la soluzione, includere una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e quelle persone potrebbero non conoscere i motivi del tuo suggerimento sul codice.
HMD

+1 per aver sottolineato che ho usato una parola chiave DESC di SQL Server come nome di colonna, che per qualche motivo consente LOL
Milo LaMar

Anche l'ortografia corretta può essere fondamentale in quanto alcuni lettori potrebbero non rendersi conto che "Lunghezza" nella risposta è in realtà un errore di battitura per "lunghezza" (non che dovrebbe causare un errore)
Jean-Claude DeMars

1

Molte volte si desidera identificare la riga che ha quella colonna con la lunghezza più lunga, soprattutto se si sta risolvendo il problema per scoprire perché la lunghezza di una colonna su una riga in una tabella è molto più lunga di qualsiasi altra riga, ad esempio. Questa query ti darà la possibilità di elencare un identificatore sulla riga per identificare di quale riga si tratta.

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

0

Per IBM Db2 è LENGTH, non LEN:

SELECT MAX(LENGTH(Desc)) FROM table_name;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.