Получить максимальную длину столбца VARCHAR в SQL Server

88

Я хочу найти самый длинный VARCHARв определенном столбце таблицы SQL Server.

Вот пример:

ID = INT IDENTITY
DESC = VARCHAR(5000)

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

Какой SQL вернуть 3? Поскольку самое длинное значение составляет 3 символа?

Майло Ламар
источник

Ответы:

167

Используйте встроенные функции для length и max в столбце описания:

SELECT MAX(LEN(DESC)) FROM table_name;

Обратите внимание: если ваша таблица очень большая, могут возникнуть проблемы с производительностью.

благоговение
источник
Спасибо, я напугал мозг и вспомнил вопрос о функции LEN в середине, но подумал, что в любом случае было бы неплохо иметь здесь. Спасибо друг!
Майло Ламар,
17
Просто примечание: если вы хотите знать размер, а не количество символов, используйте DATALENGTH(поскольку вы можете использовать NVARCHARв некоторых местах или когда-нибудь).
Аарон Бертран,
37

для mysql его длина не len

SELECT MAX(LENGTH(Desc)) FROM table_name
Абхишек Гоэль
источник
1
Та же функция LENGTH и для postgresql. (не LEN)
dimuthu
19

Осторожно!! Если есть пробелы, они не будут учитываться методом LEN в T-SQL. Не позволяйте этому обмануть вас и используйте

select max(datalength(Desc)) from table_name
Bevada
источник
Хорошая точка зрения. Фактически, varchars 'asd' и 'asd' обрабатываются SQL Server одинаково (за исключением предложения LIKE). Для получения подробной информации проверьте: support.microsoft.com/en-us/help/316626/…
sotn
9

Для Oracle это также LENGTH вместо LEN

SELECT MAX(LENGTH(Desc)) FROM table_name

Кроме того, DESC - зарезервированное слово. Хотя многие зарезервированные слова по-прежнему будут работать для имен столбцов во многих случаях, это плохая практика, а в некоторых случаях могут возникнуть проблемы. Они зарезервированы по какой-то причине.

Если слово Desc использовалось только в качестве примера, следует отметить, что не все это поймут, но многие поймут, что это зарезервированное слово для Descending. Лично я начал с этого, а затем попытался выяснить, куда идет имя столбца, потому что все, что у меня было, были зарезервированными словами. Понять это не заняло много времени, но имейте это в виду, решая, чем заменить ваше фактическое имя столбца.

codeguruinboise
источник
6

Дает максимальное количество записей в таблице

select max(len(Description))from Table_Name

Дает рекорд с большим количеством

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

Надежда кому-то помогает.

шайджут
источник
3
SELECT MAX(LEN(Desc)) as MaxLen FROM table
Майло Ламар
источник
2

Для sql server (SSMS)

select MAX(LEN(ColumnName)) from table_name

Это вернет количество символов.

 select MAX(DATALENGTH(ColumnName)) from table_name

Это вернет количество использованных / необходимых байтов.

ЕСЛИ кто-то использует varchar, тогда используйте DATALENGTH. Подробнее

MSTdev
источник
1
SELECT TOP 1 column_name, LEN(column_name) AS Lenght FROM table_name ORDER BY LEN(column_name) DESC
Александру-Кодрин Панайте
источник
2
Хотя этот фрагмент кода может быть решением, включение объяснения действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода.
HMD
+1 за указание на то, что я использовал ключевое слово DESC в SQL Server в качестве имени столбца, что по какой-то причине позволяет LOL
Майло Ламар
Правильное написание также может иметь решающее значение, поскольку некоторые читатели могут не осознавать, что «длина» в ответе на самом деле является опечаткой для «длины» (не то, что, если должно вызвать ошибку)
Жан-Клод ДеМарс
1

Часто вам нужно определить строку, в которой этот столбец имеет наибольшую длину, особенно если вы пытаетесь выяснить, почему длина столбца в строке в таблице намного больше, чем, например, любой другой строки. Этот запрос предоставит вам возможность указать идентификатор в строке, чтобы определить, какая это строка.

select ID, [description], len([description]) as descriptionlength
FROM [database1].[dbo].[table1]
where len([description]) = 
 (select max(len([description]))
  FROM [database1].[dbo].[table1]
самодельный
источник
0

Для IBM Db2 его ДЛИНА, а не ДЛИНА:

SELECT MAX(LENGTH(Desc)) FROM table_name;
Шашанк
источник