【问题标题】:How to get the size of a varchar[n] field in one SQL statement?如何在一条 SQL 语句中获取 varchar[n] 字段的大小?
【发布时间】:2011-04-18 15:34:35
【问题描述】:

假设我有一个 SQL 表,其中有一个名为“Remarks”的 varchar[1000] 字段。

我想制作一条 SQL 语句,执行时将返回 1000,或者将来可能更改为 varchar 字段的大小。

类似SELECT size(Remarks) FROM mytable

我该怎么做?

【问题讨论】:

  • 这将取决于您正在使用的 RDBMS。但是正如尼尔所说,您可能必须在服务器的信息方案中进行搜索。

标签: sql sql-server-2008 varchar


【解决方案1】:
select column_name, data_type, character_maximum_length    
  from information_schema.columns  
 where table_name = 'myTable'

【讨论】:

  • 如果您只想过滤一列,可以指定附加子句AND column_name = 'Remarks'
  • 仅供参考,这是 MySQL 特定的查询。
  • @pickypg:问题是针对 SQL Server 2008 的。
  • INFORMATION_SCHEMA 是 ANSI 标准的东西 - 根本不是 MySQL 或 SQL Server 特定的!
  • 按特定数据库模式过滤添加:AND table_schema = 'mydatabase'
【解决方案2】:

特别是在 SQL Server 上:

SELECT DATALENGTH(Remarks) AS FIELDSIZE FROM mytable

Documentation

【讨论】:

  • 该语句返回已经输入的数据的长度。我想要该字段将容纳的数据的大小。
  • 如果您发布代码、XML 或数据示例,在文本编辑器中突出显示这些行,然后单击编辑器上的“代码示例”按钮 ({ })工具栏以很好地格式化和语法突出显示它!
【解决方案3】:

对于 SQL Server(2008 及更高版本):

SELECT COLUMNPROPERTY(OBJECT_ID('mytable'), 'Remarks', 'PRECISION');

COLUMNPROPERTY 返回列或参数(id、列/参数、属性)的信息。 PRECISION 属性返回列或参数的数据类型的长度。

COLUMNPROPERTY documentation

【讨论】:

    【解决方案4】:

    这将适用于 SQL SERVER...

    SELECT COL_LENGTH('Table', 'Column')
    

    【讨论】:

    【解决方案5】:

    我正在寻找该列的总大小并点击了这篇文章,我的解决方案基于 MarcE 的。

    SELECT sum(DATALENGTH(your_field)) AS FIELDSIZE FROM your_table
    

    【讨论】:

      【解决方案6】:

      这是一个计算 varchar(Nn) 最大有效长度的函数:

      CREATE FUNCTION [dbo].[GetMaxVarcharColumnLength] (@TableSchema NVARCHAR(MAX), @TableName NVARCHAR(MAX), @ColumnName VARCHAR(MAX))
      RETURNS INT
      AS
      BEGIN
          RETURN (SELECT character_maximum_length FROM information_schema.columns  
                  WHERE table_schema = @TableSchema AND table_name = @TableName AND column_name = @ColumnName);
      END
      

      用法:

      IF LEN(@Name) > [dbo].[GetMaxVarcharColumnLength]('person', 'FamilyStateName', 'Name') 
                  RETURN [dbo].[err_Internal_StringForVarcharTooLong]();
      

      【讨论】:

        【解决方案7】:

        对于 t-SQL,我对 varchar 列使用以下查询(显示排序规则和 is_null 属性):

        SELECT
            s.name
            , o.name as table_name
            , c.name as column_name
            , t.name as type
            , c.max_length
            , c.collation_name
            , c.is_nullable
        FROM
            sys.columns c
            INNER JOIN sys.objects o ON (o.object_id = c.object_id)
            INNER JOIN sys.schemas s ON (s.schema_id = o.schema_id)
            INNER JOIN sys.types t ON (t.user_type_id = c.user_type_id)
        WHERE
            s.name = 'dbo'
            AND t.name IN ('varchar') -- , 'char', 'nvarchar', 'nchar')
        ORDER BY
            o.name, c.name
        

        【讨论】:

        • 请注意,这将以字节为单位显示 max_length,这意味着您将获得 NVARCHAR 列的“双倍”大小。
        【解决方案8】:
        select column_name, data_type, character_maximum_length    
        from INFORMATION_SCHEMA.COLUMNS
        where table_name = 'Table1'
        

        【讨论】:

          【解决方案9】:

          对于 MS SQL Server,这将返回列长度:

          SELECT COL_LENGTH('dbo.mytable', 'Remarks') AS Result;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-06-24
            • 1970-01-01
            • 1970-01-01
            • 2018-02-14
            • 1970-01-01
            • 1970-01-01
            • 2011-12-03
            • 2012-09-08
            相关资源
            最近更新 更多