How to get the size of a varchar[n] field in one SQL statement?

后端 未结 8 1550
自闭症患者
自闭症患者 2020-11-29 01:20

Suppose that I have a SQL table that has a varchar[1000] field called \"Remarks\".

I would like to craft a single SQL statement, which when executed, will return 100

相关标签:
8条回答
  • 2020-11-29 01:22

    For t-SQL I use the following query for varchar columns (shows the collation and is_null properties):

    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
    
    0 讨论(0)
  • 2020-11-29 01:25

    I was looking for the TOTAL size of the column and hit this article, my solution is based off of MarcE's.

    SELECT sum(DATALENGTH(your_field)) AS FIELDSIZE FROM your_table
    
    0 讨论(0)
  • 2020-11-29 01:33

    On SQL Server specifically:

    SELECT DATALENGTH(Remarks) AS FIELDSIZE FROM mytable
    

    Documentation

    0 讨论(0)
  • 2020-11-29 01:33

    This will work on SQL SERVER...

    SELECT COL_LENGTH('Table', 'Column')
    
    0 讨论(0)
  • 2020-11-29 01:37
    select column_name, data_type, character_maximum_length    
      from information_schema.columns  
     where table_name = 'myTable'
    
    0 讨论(0)
  • 2020-11-29 01:37

    This is a function for calculating max valid length for 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
    

    Usage:

    IF LEN(@Name) > [dbo].[GetMaxVarcharColumnLength]('person', 'FamilyStateName', 'Name') 
                RETURN [dbo].[err_Internal_StringForVarcharTooLong]();
    
    0 讨论(0)
提交回复
热议问题