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?

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.


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

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

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.


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.



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


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

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]

0

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

SELECT MAX(LENGTH(Desc)) FROM table_name;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.