#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:
Комментарии:
1. Эта инструкция возвращает длину данных, которые уже были введены. Мне нужен размер данных, которые будет содержать поле.
2. Если вы публикуете примеры кода, XML или данных, пожалуйста , выделите эти строки в текстовом редакторе и нажмите на кнопку «примеры кода» (
{ }
) на панели инструментов редактора, чтобы красиво оформить и выделить синтаксис!
Ответ №3:
Для SQL Server (2008 и выше):
SELECT COLUMNPROPERTY(OBJECT_ID('mytable'), 'Remarks', 'PRECISION');
COLUMNPROPERTY возвращает информацию для столбца или параметра (идентификатор, столбец / параметр, свойство). Свойство PRECISION возвращает длину типа данных столбца или параметра.
Ответ №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