检索SQL Server中VARCHAR列的最大长度


88

我想VARCHAR在SQL Server表的特定列中找到最长的。

这是一个例子:

ID = INT IDENTITY
DESC = VARCHAR(5000)

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

返回3的SQL是什么?由于最长的值是3个字符?

Answers:


167

在说明列中使用内置函数来获取长度和最大值:

SELECT MAX(LEN(DESC)) FROM table_name;

请注意,如果您的表很大,则可能存在性能问题。


谢谢,我脑子有点屁,想起了LEN函数的中间问题,但无论如何还是觉得这很好。谢了哥们!
米洛·拉玛(Maro LaMar)2012年

17
请注意,如果您想知道大小而不是字符数,请使用DATALENGTH(因为您可能NVARCHAR在某些地方或某天使用)。
亚伦·伯特兰


19

小心!!如果有空格,T-SQL中的LEN方法将不考虑它们。不要让这个欺骗你并使用

select max(datalength(Desc)) from table_name

好点子。实际上,SQL Server将varchars'asd'和'asd'视为相同(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 Server(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

正确的拼写也很重要,因为有些阅读可能无法意识到答案中的“长度”实际上是“长度”的错字(不是说应该引起错误)
Jean-Claude DeMars

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,其长度(而非LEN):

SELECT MAX(LENGTH(Desc)) FROM table_name;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.