Как получить размер поля varchar [n] в одной инструкции SQL?

#sql #sql-server-2008 #varchar

#sql #sql-server-2008 #varchar

Вопрос:

Предположим, что у меня есть таблица SQL, в которой есть поле varchar [1000], называемое «Примечания».

Я хотел бы создать одну инструкцию SQL, которая при выполнении вернет 1000 или любой другой размер поля varchar, который может быть изменен в будущем.

Что-то вроде SELECT size(Remarks) FROM mytable .

Как мне это сделать?

Комментарии:

1. Это будет зависеть от СУБД, над которой вы работаете. Но, как сказал Нил, возможно, вам придется выполнить поиск в информационной схеме вашего сервера.

Ответ №1:

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

Комментарии:

1. вы могли бы указать дополнительное предложение AND column_name = 'Remarks' , если хотите отфильтровать только один столбец.

2. К вашему сведению, это специфичный для MySQL запрос.

3. @pickypg: Вопрос касается SQL Server 2008.

4. INFORMATION_SCHEMA это стандартная вещь ANSI — она вообще не специфична для MySQL или SQL Server!

5. для фильтрации по определенной схеме базы данных добавьте: AND table_schema = 'mydatabase'

Ответ №2:

Конкретно на SQL Server:

 SELECT DATALENGTH(Remarks) AS FIELDSIZE FROM mytable
  

Документация

Комментарии:

1. Эта инструкция возвращает длину данных, которые уже были введены. Мне нужен размер данных, которые будет содержать поле.

2. Если вы публикуете примеры кода, XML или данных, пожалуйста , выделите эти строки в текстовом редакторе и нажмите на кнопку «примеры кода» ( { } ) на панели инструментов редактора, чтобы красиво оформить и выделить синтаксис!

Ответ №3:

Для SQL Server (2008 и выше):

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

COLUMNPROPERTY возвращает информацию для столбца или параметра (идентификатор, столбец / параметр, свойство). Свойство PRECISION возвращает длину типа данных столбца или параметра.

Документация COLUMNPROPERTY

Ответ №4:

Это будет работать на SQL SERVER…

 SELECT COL_LENGTH('Table', 'Column')
  

Комментарии:

1. Стоит отметить, что это вернет длину в байтах , поэтому вам придется уменьшить ее вдвое, например, для NVARCHAR или NCHAR . Смотрите learn.microsoft.com/en-us/sql/t-sql/functions /…

Ответ №5:

Я искал ОБЩИЙ размер столбца и наткнулся на эту статью, мое решение основано на МарсЕ.

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

Ответ №6:

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

Ответ №7:

Это функция для вычисления максимально допустимой длины для 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]();
  

Ответ №8:

Для 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
  

Комментарии:

1. Пожалуйста, имейте в виду, что при этом будет отображаться значение max_length в байтах, что означает, что вы получите «двойные» размеры для столбцов NVARCHAR.

Ответ №9:

Для MS SQL Server это вернет длину столбца:

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

Ответ №10:

Для SQL Server вместо SIZE мы можем использовать LEN rest, все, о чем идет речь, в порядке. LEN возвращает количество символов, не уверен, что я должен называть это удобным для глаз или для мозга 🙂

 SELECT LEN(Remarks) FROM mytable
  

DATALENGTH также отлично работает, как указано в других ответах, но он возвращает количество байтов.

 SELECT DATALENGTH(Remarks) FROM mytable
  

Вот ссылка на документацию