如何在一个SQL语句中获取varchar [n]字段的大小?


78

假设我有一个SQL表,该表具有一个称为“备注”的varchar [1000]字段。

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

有点像SELECT size(Remarks) FROM mytable

我该怎么做呢?


这将取决于您正在使用的RDBMS。但是正如尼尔所说,您可能必须搜索服务器的信息方案。
马克·布维耶

Answers:


121
select column_name, data_type, character_maximum_length    
  from information_schema.columns  
 where table_name = 'myTable'

8
AND column_name = 'Remarks'如果只想过滤出一列,则可以指定其他子句。
Sanjeevakumar Hiremath,2011年

3
仅供参考,这是MySQL特定的查询。
pickypg 2011年

@pickypg:现在的问题是SQL Server 2008年
尼尔·奈特

7
INFORMATION_SCHEMA是ANSI标准的东西-根本不是MySQL或SQL Server特有的!
marc_s

要通过特定的数据库架构进行过滤,请添加以下内容:AND table_schema = 'mydatabase'
user12345

26

特别是在SQL Server上:

SELECT DATALENGTH(Remarks) AS FIELDSIZE FROM mytable

文献资料


2
该语句返回已输入数据的长度。我想要该字段将容纳的数据大小。
维维安河

1
如果要发布代码,XML或数据示例,在文本编辑器中突出显示这些行,然后单击{ }编辑器工具栏上的“代码示例”按钮(),以很好地格式化和语法突出显示它!
marc_s

11

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

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

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

COLUMNPROPERTY文档



1

我一直在寻找列的TOTAL大小,然后点击本文,我的解决方案基于MarcE。

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

0

对于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列的大小将为'double'。
詹斯

0
select column_name, data_type, character_maximum_length    
from INFORMATION_SCHEMA.COLUMNS
where table_name = 'Table1'

0

这是一个用于计算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]();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.