Rufen Sie die maximale Länge einer VARCHAR-Spalte in SQL Server ab

86

Ich möchte die längste VARCHARin einer bestimmten Spalte einer SQL Server-Tabelle finden.

Hier ist ein Beispiel:

ID = INT IDENTITY
DESC = VARCHAR(5000)

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

Was ist die SQL, um 3 zurückzugeben? Da der längste Wert 3 Zeichen ist?

Milo LaMar
quelle

Antworten:

165

Verwenden Sie die integrierten Funktionen für Länge und Maximum in der Beschreibungsspalte:

SELECT MAX(LEN(DESC)) FROM table_name;

Beachten Sie, dass bei einer sehr großen Tabelle Leistungsprobleme auftreten können.

aweis
quelle
Vielen Dank, ich hatte einen Hirnfurz und erinnerte mich an die LEN-Funktion in der Mitte der Frage, dachte aber, es könnte trotzdem gut sein, hier zu sein. Danke Kumpel!
Milo LaMar
17
Nur eine Anmerkung, wenn Sie die Größe im Gegensatz zur Anzahl der Zeichen wissen möchten, verwenden Sie DATALENGTH(da Sie möglicherweise NVARCHARan einigen Stellen oder eines Tages verwenden).
Aaron Bertrand
36

für mysql ist seine länge nicht len

SELECT MAX(LENGTH(Desc)) FROM table_name
Abhishek Goel
quelle
1
Gleiche 'LENGTH'-Funktion auch für postgresql. (nicht 'LEN')
dimuthu
19

Achtung!! Wenn Leerzeichen vorhanden sind, werden sie von der LEN-Methode in T-SQL nicht berücksichtigt. Lass dich von diesem Trick nicht täuschen und benutze ihn

select max(datalength(Desc)) from table_name
bevada
quelle
Guter Punkt. Tatsächlich werden die Varchars 'asd' und 'asd' von SQL Server gleich behandelt (außer in der LIKE-Klausel). Für Details überprüfen: support.microsoft.com/en-us/help/316626/...
SOTN
9

Für Oracle ist es auch LÄNGE anstelle von LEN

SELECT MAX(LENGTH(Desc)) FROM table_name

DESC ist auch ein reserviertes Wort. Obwohl viele reservierte Wörter unter vielen Umständen immer noch für Spaltennamen funktionieren, ist dies eine schlechte Praxis und kann unter bestimmten Umständen Probleme verursachen. Sie sind aus einem bestimmten Grund reserviert.

Wenn das Wort Desc nur als Beispiel verwendet wurde, sollte beachtet werden, dass nicht jeder dies erkennen wird, aber viele werden erkennen, dass es ein reserviertes Wort für Descending ist. Persönlich begann ich damit und versuchte dann herauszufinden, wohin der Spaltenname ging, weil ich nur reservierte Wörter hatte. Es dauerte nicht lange, um es herauszufinden, aber denken Sie daran, wenn Sie entscheiden, was Ihren tatsächlichen Spaltennamen ersetzen soll.

Codeguruinboise
quelle
6

Gibt die maximale Anzahl der Datensätze in der Tabelle an

select max(len(Description))from Table_Name

Gibt Rekord mit größerer Anzahl

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

Hoffnung hilft jemandem.

Shaijut
quelle
3
SELECT MAX(LEN(Desc)) as MaxLen FROM table
Milo LaMar
quelle
2

Für SQL Server (SSMS)

select MAX(LEN(ColumnName)) from table_name

Dies gibt die Anzahl der Zeichen zurück.

 select MAX(DATALENGTH(ColumnName)) from table_name

Dies gibt die Anzahl der verwendeten / erforderlichen Bytes zurück.

WENN jemand varchar benutzt, dann benutze DATALENGTH. Mehr Details

MSTdev
quelle
1
SELECT TOP 1 column_name, LEN(column_name) AS Lenght FROM table_name ORDER BY LEN(column_name) DESC
Alexandru-Codrin Panaite
quelle
2
Während dieses Code-Snippet die Lösung sein kann, hilft das Hinzufügen einer Erklärung wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in Zukunft beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen.
HMD
+1 für den Hinweis Ich habe ein SQL Server-Schlüsselwort DESC als Spaltennamen verwendet, was aus irgendeinem Grund LOL
Milo LaMar
Die korrekte Rechtschreibung kann auch kritisch sein, da einige Leser möglicherweise nicht erkennen, dass 'Länge' in der Antwort tatsächlich ein Tippfehler für 'Länge' ist (nicht, wenn dies einen Fehler verursachen sollte)
Jean-Claude DeMars
1

Oft möchten Sie die Zeile mit dieser Spalte mit der längsten Länge identifizieren, insbesondere wenn Sie Fehler beheben, um herauszufinden, warum die Länge einer Spalte in einer Zeile in einer Tabelle beispielsweise so viel länger ist als in jeder anderen Zeile. Diese Abfrage gibt Ihnen die Möglichkeit, einen Bezeichner in der Zeile aufzulisten, um festzustellen, um welche Zeile es sich handelt.

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

Für IBM Db2 ist es LÄNGE, nicht LEN:

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