Отримати максимальну довжину стовпця VARCHAR у SQL Server


87

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

Ось приклад:

ID = INT IDENTITY
DESC = VARCHAR(5000)

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

Що таке SQL для повернення 3? Оскільки найдовше значення - 3 символи?

Відповіді:


166

Використовуйте вбудовані функції по довжині та макс. У стовпці опису:

SELECT MAX(LEN(DESC)) FROM table_name;

Зверніть увагу, що якщо ваша таблиця дуже велика, можуть виникнути проблеми з продуктивністю.


Дякую, я мав пердеть мозку і запам’ятав функцію LEN до середини запитання, але подумав, що, мабуть, було б добре тут бути. Дякую, друже!
Майло Ламар

17
Просто примітка, якщо ви хочете знати розмір на відміну від кількості символів, використовуйте DATALENGTH(оскільки ви можете використовувати NVARCHARв деяких місцях або колись).
Аарон Бертран,


19

Стережись!! Якщо є пробіли, вони не будуть розглядатися методом LEN у T-SQL. Не дозволяйте цьому обдурювати вас і використовувати

select max(datalength(Desc)) from table_name

Гарна думка. Насправді вархари '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. Особисто я почав із цього, а потім спробував зрозуміти, куди пішла назва стовпця, бо все, що у мене було, були зарезервовані слова. Це не зайняло багато часу, щоб зрозуміти це, але майте це на увазі, вирішуючи, чим замінити ваше справжнє ім’я стовпця.


6

Дає максимальну кількість записів у таблиці

select max(len(Description))from Table_Name

Дає запис, маючи більший рахунок

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

Надія комусь допомагає.



2

Для SQL-сервера (SSMS)

select MAX(LEN(ColumnName)) from table_name

Це поверне кількість символів.

 select MAX(DATALENGTH(ColumnName)) from table_name

Це поверне кількість використаних / необхідних байтів.

ЯКЩО хтось використовує varchar, тоді використовуйте DATALENGTH. Детальніше


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

2
Хоча цей фрагмент коду може бути рішенням, включаючи пояснення, він дійсно допомагає поліпшити якість вашої публікації. Пам’ятайте, що ви будете відповідати на запитання для читачів у майбутньому, і ці люди можуть не знати причин вашої пропозиції коду.
HMD

+1 за вказівку на те, що я використав ключове слово SQL Server DESC як назву стовпця, що дозволяє чомусь LOL
Milo LaMar

Правильне написання також може бути критично важливим, оскільки деякі читання цього слова можуть не усвідомлювати, що "Lenght" у відповіді насправді є друкарською помилкою для "length" (не так, якщо це повинно спричинити помилку)
Жан-Клод Демарс,

1

Багато разів ви хочете ідентифікувати рядок, який має цей стовпець з найбільшою довжиною, особливо якщо ви вирішуєте проблеми, щоб з’ясувати, чому довжина стовпця в рядку в таблиці набагато довша, ніж будь-який інший рядок, наприклад. Цей запит дасть вам можливість вказати ідентифікатор у рядку, щоб визначити, який це рядок.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.