Pobierz maksymalną długość kolumny VARCHAR w SQL Server


88

Chcę znaleźć najdłuższy VARCHARw określonej kolumnie tabeli programu SQL Server.

Oto przykład:

ID = INT IDENTITY
DESC = VARCHAR(5000)

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

Jaki SQL ma zwrócić 3? Ponieważ najdłuższa wartość to 3 znaki?

Odpowiedzi:


167

Użyj wbudowanych funkcji długości i maksimum w kolumnie opisu:

SELECT MAX(LEN(DESC)) FROM table_name;

Pamiętaj, że jeśli Twój stół jest bardzo duży, mogą wystąpić problemy z wydajnością.


Dziękuję, miałem pierdnięcie mózgu i przypomniałem sobie o funkcji LEN w połowie pytania, ale pomyślałem, że i tak może być dobrze mieć tutaj. Dzięki stary!
Milo LaMar

17
Uwaga, jeśli chcesz poznać rozmiar, a nie liczbę znaków, użyj DATALENGTH(ponieważ możesz użyć NVARCHARw niektórych miejscach lub kiedyś).
Aaron Bertrand

37

dla mysql jego długość nie len

SELECT MAX(LENGTH(Desc)) FROM table_name

1
Ta sama funkcja „LENGTH” również dla postgresql. (nie „LEN”)
dimuthu

19

Uważaj!! Jeśli są spacje, nie będą uwzględniane przez metodę LEN w T-SQL. Nie daj się oszukać i użyj

select max(datalength(Desc)) from table_name

Słuszna uwaga. W rzeczywistości varchars „asd” i „asd” są traktowane tak samo przez SQL Server (z wyjątkiem klauzuli LIKE). Aby uzyskać szczegółowe informacje, sprawdź: support.microsoft.com/en-us/help/316626/ ...
sotn

9

W przypadku Oracle jest to również LENGTH zamiast LEN

SELECT MAX(LENGTH(Desc)) FROM table_name

Ponadto DESC jest słowem zastrzeżonym. Chociaż wiele zastrzeżonych słów będzie nadal działać w nazwach kolumn w wielu okolicznościach, jest to zła praktyka i może powodować problemy w niektórych okolicznościach. Są zarezerwowane z jakiegoś powodu.

Jeśli słowo Desc zostało użyte tylko jako przykład, należy zauważyć, że nie wszyscy zdają sobie z tego sprawę, ale wielu zda sobie sprawę, że jest to zarezerwowane słowo dla Malejąco. Osobiście zacząłem od tego, a następnie próbowałem dowiedzieć się, gdzie się podziała nazwa kolumny, ponieważ miałem tylko zarezerwowane słowa. Zrozumienie tego nie zajęło dużo czasu, ale pamiętaj o tym, decydując, co zastąpić rzeczywistą nazwę kolumny.


6

Podaje maksymalną liczbę rekordów w tabeli

select max(len(Description))from Table_Name

Daje rekord, mając większą liczbę

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

Nadzieja pomaga komuś.



2

W przypadku serwera SQL (SSMS)

select MAX(LEN(ColumnName)) from table_name

Zwróci to liczbę znaków.

 select MAX(DATALENGTH(ColumnName)) from table_name

Zwróci liczbę wykorzystanych / wymaganych bajtów.

JEŚLI ktoś użyje varchar, użyj DATALENGTH. Więcej szczegółów


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

2
Chociaż ten fragment kodu może być rozwiązaniem, dołączenie wyjaśnienia naprawdę pomaga poprawić jakość Twojego posta. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a osoby te mogą nie znać powodów, dla których zaproponowałeś kod.
HMD

+1 za wskazanie Użyłem słowa kluczowego DESC serwera SQL jako nazwy kolumny, co z jakiegoś powodu pozwala LOL
Milo LaMar,

Prawidłowa pisownia może być również krytyczna, ponieważ niektórzy czytający to mogą nie zdawać sobie sprawy z tego, że
``

1

Często chcesz zidentyfikować wiersz, który ma tę kolumnę o największej długości, zwłaszcza jeśli rozwiązujesz problemy, aby dowiedzieć się, dlaczego długość kolumny w wierszu w tabeli jest o wiele dłuższa niż na przykład jakikolwiek inny wiersz. To zapytanie umożliwia wyświetlenie identyfikatora w wierszu w celu zidentyfikowania, który to wiersz.

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

0

W przypadku IBM Db2 jego DŁUGOŚĆ, a nie LEN:

SELECT MAX(LENGTH(Desc)) FROM table_name;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.