Як отримати розмір поля varchar [n] в одному операторі SQL?


78

Припустимо, у мене є таблиця SQL, яка містить поле varchar [1000], яке називається "Зауваження".

Я хотів би створити єдиний оператор SQL, який при виконанні поверне 1000 або будь-який інший розмір поля varchar, який може бути змінено в майбутньому.

Щось на зразок SELECT size(Remarks) FROM mytable.

Як це зробити?


Це буде залежати від СУБД, над якими ви працюєте. Але, як сказав Ніл, можливо, вам доведеться шукати в інформаційній схемі вашого сервера.
Марк Був'є

Відповіді:


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

8
Ви можете вказати додаткове речення, AND column_name = 'Remarks'якщо ви хочете відфільтрувати лише один стовпець.
Sanjeevakumar Hiremath

3
Просто FYI, це специфічний запит MySQL.
pickypg

@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

Я шукав ЗАГАЛЬНИЙ розмір стовпця і потрапив у цю статтю, моє рішення базується на 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.
Йенс

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]();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.