【问题标题】:Retrieve the maximum length of a VARCHAR column in SQL Server在 SQL Server 中检索 VARCHAR 列的最大长度
【发布时间】: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 个字符?

【问题讨论】:

    标签: sql sql-server string-length maxlength


    【解决方案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
      

      【讨论】:

      【解决方案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 % 工作试试这个。

                【讨论】:

                  猜你喜欢
                  • 2018-08-09
                  • 1970-01-01
                  • 2012-02-08
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-04-24
                  • 2016-09-14
                  相关资源
                  最近更新 更多