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

Mil*_*Mar 76 sql sql-server maxlength string-length

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

这是一个例子:

ID = INT IDENTITY
DESC = VARCHAR(5000)

ID | Desc
---|-----
1  | a
2  | aaa
3  | aa
Run Code Online (Sandbox Code Playgroud)

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

awe*_*eis 145

在description列中使用内置函数的length和max:

SELECT MAX(LEN(DESC)) FROM table_name;
Run Code Online (Sandbox Code Playgroud)

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

  • 只是注意,如果你想知道大小而不是字符数,可以使用`DATALENGTH`(因为你可以在某些地方或某天使用`NVARCHAR`). (14认同)

Abh*_*oel 32

对于mysql,它的长度不是len

SELECT MAX(LENGTH(Desc)) FROM table_name
Run Code Online (Sandbox Code Playgroud)

  • postgresql 也有相同的“LENGTH”函数。(不是“伦”) (2认同)

小智 17

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

select max(datalength(Desc)) from table_name
Run Code Online (Sandbox Code Playgroud)


MST*_*dev 9

对于 SQL 服务器 (SSMS)

选项1:

-- This returns number of characters
select MAX(LEN(ColumnName)) from table_name
Run Code Online (Sandbox Code Playgroud)

选项2:

-- This returns the number of bytes
select MAX(DATALENGTH(ColumnName)) from table_name
Run Code Online (Sandbox Code Playgroud)

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


小智 8

对于Oracle,它也是LENGTH而不是LEN

SELECT MAX(LENGTH(Desc)) FROM table_name
Run Code Online (Sandbox Code Playgroud)

此外,DESC是保留字.尽管在许多情况下许多保留字仍然适用于列名称,但这样做是不好的做法,并且在某些情况下可能会导致问题.他们保留是有原因的.

如果仅使用Desc这个词作为例子,应该注意的是并非每个人都会意识到这一点,但是很多人会意识到它是Descending的保留词.就个人而言,我开始使用它,然后试图找出列名称的去向,因为我所有的都是保留字.没过多久就弄明白了,但在决定用什么代替你的实际列名时要记住这一点.


sto*_*tom 5

给出表中记录的最大计数

select max(len(Description))from Table_Name
Run Code Online (Sandbox Code Playgroud)

创造更多记录

select Description from Table_Name group by Description having max(len(Description)) >27
Run Code Online (Sandbox Code Playgroud)

希望可以帮助某人。


Ale*_*ite 5

SELECT TOP 1 column_name, LEN(column_name) AS Lenght FROM table_name ORDER BY LEN(column_name) DESC
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码片段可能是解决方案,但[包括解释](//meta.stackexchange.com/questions/114762/explaining-entirely-‌​code-based-answers)确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而那些人可能不知道您建议代码的原因。 (4认同)

小智 5

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

select ID, [description], len([description]) as descriptionlength
FROM [database1].[dbo].[table1]
where len([description]) = 
 (select max(len([description]))
  FROM [database1].[dbo].[table1]
Run Code Online (Sandbox Code Playgroud)