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

Posted

技术标签:

【中文标题】在 SQL Server 中检索 VARCHAR 列的最大长度【英文标题】:Retrieve the maximum length of a VARCHAR column in SQL Server 【发布时间】:2012-03-24 10:31:12 【问题描述】:

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

这是一个例子:

ID = INT IDENTITY
DESC = VARCHAR(5000)

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

返回 3 的 SQL 是什么?因为最长的值是 3 个字符?

【问题讨论】:

【参考方案1】:

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

SELECT MAX(LEN(DESC)) FROM table_name;

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

【讨论】:

谢谢,我脑子里放了个屁,还记得中间问题的 LEN 功能,但我觉得还是有这里可能会很好。谢谢老哥! 请注意,如果您想知道大小而不是字符数,请使用DATALENGTH(因为您可能在某些地方或某天使用NVARCHAR)。【参考方案2】:
SELECT MAX(LEN(Desc)) as MaxLen FROM table

【讨论】:

【参考方案3】:

对于 MySQL,它是 LENGTH,而不是 LEN

SELECT MAX(LENGTH(Desc)) FROM table_name

【讨论】:

对于 postgresql 也有相同的“LENGTH”函数。 (不是“LEN”) 这如何回答这个问题?【参考方案4】:

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

select max(datalength(Desc)) from table_name

【讨论】:

好点。实际上,SQL Server 对 varchars 'asd' 和 'asd ' 的处理方式相同(LIKE 子句除外)。详情查看:support.microsoft.com/en-us/help/316626/…【参考方案5】:

对于 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

希望能帮助别人。

【讨论】:

【参考方案7】:

对于 sql server (SSMS)

select MAX(LEN(ColumnName)) from table_name

这将返回字符数。

 select MAX(DATALENGTH(ColumnName)) from table_name

这将返回使用/需要的字节数。

如果有人使用 varchar,则使用 DATALENGTH.More details

【讨论】:

【参考方案8】:
SELECT TOP 1 column_name, LEN(column_name) AS Lenght FROM table_name ORDER BY LEN(column_name) DESC

【讨论】:

虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。 +1 指出我使用了 SQL Server 关键字 DESC 作为列名,出于某种原因它允许这样做 LOL 正确的拼写也很重要,因为有些人可能没有意识到答案中的“长度”实际上是“长度”的拼写错误(如果不应该导致错误)【参考方案9】:

很多时候,您想确定该列的长度最长的行,尤其是当您正在排除故障以找出为什么表中某行上的列长度比任何其他行都长得多时,因为实例。此查询将为您提供在行上列出标识符的选项,以便识别它是哪一行。

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

【讨论】:

【参考方案10】:

对于 IBM Db2,它的 LENGTH,而不是 LEN:

SELECT MAX(LENGTH(Desc)) FROM table_name;

【讨论】:

【参考方案11】:
select * from table name from where length( column name) =(select MAX(Length(column  name) from table name);  

我正在使用子查询,它的 100 % 工作试试这个。

【讨论】:

以上是关于在 SQL Server 中检索 VARCHAR 列的最大长度的主要内容,如果未能解决你的问题,请参考以下文章

如何从临时表中检索字段名称 (SQL Server 2008)

从redshift sql中的varchar列检索数字范围输出

使用 Laravel 在 SQL Server 中添加 varchar 列类型

在 Microsoft SQL Server 中存储 IP 地址

SQL SERVER中某个字段属性为varchar,我想把这个字段改成int型,如何操作?

如何在sql server中创建一个存储过程中的varchar型的输入参数默认值为空