105

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 1000, or whatever the size of the varchar field might be changed to in the future.

Something like SELECT size(Remarks) FROM mytable.

How do I do this?

1
  • This will depend on the RDBMS you are working on. But as Neil said you may have to search in the information scheme of your server. Commented Apr 18, 2011 at 15:39

10 Answers 10

156
select column_name, data_type, character_maximum_length    
  from information_schema.columns  
 where table_name = 'myTable'
5
  • 9
    you could specify additional clause AND column_name = 'Remarks' if you want to filter only one column out. Commented Apr 18, 2011 at 15:38
  • 4
    Just FYI, this is a MySQL specific query.
    – pickypg
    Commented Apr 18, 2011 at 15:38
  • @pickypg: The question is for SQL Server 2008. Commented Apr 18, 2011 at 15:42
  • 12
    INFORMATION_SCHEMA is an ANSI standard thing - not MySQL or SQL Server specific at all !
    – marc_s
    Commented Apr 18, 2011 at 15:50
  • to filter by a particular database schema add: AND table_schema = 'mydatabase'
    – user12345
    Commented Jul 3, 2014 at 19:23
37

On SQL Server specifically:

SELECT DATALENGTH(Remarks) AS FIELDSIZE FROM mytable

Documentation

2
  • 5
    This statement returns the length of the data that has already been input. I want the size of the data that the field will hold. Commented Apr 18, 2011 at 15:41
  • 1
    If you post code, XML or data samples, please highlight those lines in the text editor and click on the "code samples" button ( { } ) on the editor toolbar to nicely format and syntax highlight it!
    – marc_s
    Commented Apr 18, 2011 at 15:49
20

For SQL Server (2008 and above):

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

COLUMNPROPERTY returns information for a column or parameter (id, column/parameter, property). The PRECISION property returns the length of the data type of the column or parameter.

COLUMNPROPERTY documentation

10

This will work on SQL SERVER...

SELECT COL_LENGTH('Table', 'Column')
1
1

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
1
select column_name, data_type, character_maximum_length    
from INFORMATION_SCHEMA.COLUMNS
where table_name = 'Table1'
1

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

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
1
  • Please be aware that this will display the max_length in bytes, meaning you'll get 'double' sizes for NVARCHAR columns.
    – Jens
    Commented Aug 29, 2019 at 9:21
0

For MS SQL Server this will return column length:

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

For SQL Server, instead of SIZE we can use LEN rest everything given in question is fine. LEN returns number of characters, not sure I should call it eye friendly or brain friendly :)

SELECT LEN(Remarks) FROM mytable

DATALENGTH also works fine as given in other answers but it returns number of bytes.

SELECT DATALENGTH(Remarks) FROM mytable

Here is documentation reference

Not the answer you're looking for? Browse other questions tagged or ask your own question.