하나의 SQL 문에서 varchar [n] 필드의 크기를 얻는 방법은 무엇입니까?


78

"Remarks"라는 varchar [1000] 필드가있는 SQL 테이블이 있다고 가정합니다.

실행될 때 1000을 반환하거나 앞으로 varchar 필드의 크기가 변경 될 수있는 단일 SQL 문을 만들고 싶습니다.

같은 것 SELECT size(Remarks) FROM mytable.

어떻게해야합니까?


이것은 작업중인 RDBMS에 따라 다릅니다. 그러나 Neil이 말했듯이 서버의 정보 체계에서 검색해야 할 수도 있습니다.
Marc Bouvier 2011

답변:


122
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에 대한 것입니다.
Neil Knight

7
INFORMATION_SCHEMAANSI 표준입니다. MySQL이나 SQL Server에만 국한된 것이 아닙니다!
marc_s 2011

특정 데이터베이스 스키마 추가로 필터 :AND table_schema = 'mydatabase'
user12345

26

특히 SQL Server에서 :

SELECT DATALENGTH(Remarks) AS FIELDSIZE FROM mytable

선적 서류 비치


2
이 문은 이미 입력 된 데이터의 길이를 반환합니다. 필드가 보유 할 데이터의 크기를 원합니다.
Vivian River

1
당신이 포스트 코드, XML 또는 데이터 샘플, 경우 하시기 바랍니다 텍스트 편집기에서 그 라인을 강조하고 "코드 샘플"버튼 (클릭 { }친절에 편집기 도구 모음) 형식 및 구문을 강조!
marc_s 2011

11

SQL Server (2008 이상) :

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

COLUMNPROPERTY는 열 또는 매개 변수 (id, 열 / 매개 변수, 속성)에 대한 정보를 반환합니다. PRECISION 속성은 열 또는 매개 변수의 데이터 유형 길이를 반환합니다.

COLUMNPROPERTY 문서



1

컬럼의 총 크기를 찾고 있었고이 기사를 쳤습니다. 내 솔루션은 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'크기를 얻게됩니다.
Jens

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]();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.