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

136

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

以下是一个示例:

ID = INT IDENTITY
DESC = VARCHAR(5000)

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

如何编写SQL语句返回数字3?假设最长的值为3个字符?

11个回答

239

使用内置的长度和最大函数在描述列上:

SELECT MAX(LEN(DESC)) FROM table_name;

请注意,如果您的表非常大,可能会出现性能问题。


谢谢,我脑子一抽忘记了LEN函数,但是想把它放在这里也许会有好处。谢谢伙计! - Milo LaMar
18
请注意,如果您想了解大小而不是字符数,请使用DATALENGTH(因为您可能会在某些地方或将来使用NVARCHAR) 。 - Aaron Bertrand

61

对于MySQL,应使用LENGTH而非LEN

SELECT MAX(LENGTH(Desc)) FROM table_name

2
PostgreSQL也有相同的'LENGTH'函数,不是'LEN'。 - dimuthu
1
这个回答如何解决问题? - Yola

22

注意!!如果有空格,LEN方法在T-SQL中将不会考虑它们。不要被这个坑到,使用

select max(datalength(Desc)) from table_name

好的观点。实际上,SQL Server对于varchars 'asd'和'asd '的处理方式是相同的(除了LIKE子句)。有关详细信息,请参阅:https://support.microsoft.com/en-us/help/316626/inf-how-sql-server-compares-strings-with-trailing-spaces - yakya

10
对于Oracle而言,它使用LENGTH而不是LEN。
SELECT MAX(LENGTH(Desc)) FROM table_name

此外,DESC是一个保留字。虽然在许多情况下,许多保留字仍可用于列名称,但这样做是不好的实践,并且在某些情况下可能会引起问题。它们之所以被保留,有其原因。
如果Desc只是作为示例使用,应该注意并非每个人都会意识到这一点,但许多人会意识到它是用于降序的保留字。就个人而言,我曾经使用过这个保留字来命名列,然后试图弄清楚列名去哪了,因为我只有保留字。不过,很快就能找出来,但在决定用什么替换实际列名时,请记住这一点。

9

返回表中记录的最大计数

select max(len(Description))from Table_Name

获取记录数较多的数据

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

希望能对某些人有所帮助。


8

针对 SQL Server(SSMS)

选项 1:

-- This returns number of characters
select MAX(LEN(ColumnName)) from table_name

选项2:

-- This returns the number of bytes
select MAX(DATALENGTH(ColumnName)) from table_name

如果您正在使用 VARCHAR,请使用 DATALENGTH更多细节

5

很多时候你想要找出那一行中某个列长度最长的数据,特别是当你需要排查某一行中某一个列为什么比其他行的同一列长度都要长得多的情况。这个查询语句可以给你提供在每一行上列出一个标识符以便于辨别它是哪一行。

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

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

4
尽管这段代码可能是解决方案,但包括解释真的有助于提高您的帖子质量。请记住,您正在回答未来读者的问题,而这些人可能不知道您建议使用该代码的原因。 - HMD
+1 指出我将 SQL Server 关键字 DESC 用作列名,这是由于某种原因允许的哈哈 - Milo LaMar
正确的拼写也非常重要,因为有些人可能没有意识到答案中的“Lenght”实际上是“length”的拼写错误(尽管它不应该导致错误)。 - Jean-Claude DuBois

2
SELECT MAX(LEN(Desc)) as MaxLen FROM table

1
select * from table name from where length( column name) =(select MAX(Length(column  name) from table name);  

我正在使用子查询,它百分之百可行,请尝试此方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接