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

发布于 2024-11-02 06:13:47 字数 196 浏览 7 评论 0原文

假设我有一个 SQL 表,其中有一个名为“Remarks”的 varchar[1000] 字段。

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

类似于SELECT size(Remarks) FROM mytable

我该怎么做?

Suppose that I have a SQL table that has a varchar[1000] field called "Remarks".

I would like to craft a single SQL statement, which when executed, will return 1000, or whatever the size of the varchar field might be changed to in the future.

Something like SELECT size(Remarks) FROM mytable.

How do I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

数理化全能战士 2024-11-09 06:13:47
select column_name, data_type, character_maximum_length    
  from information_schema.columns  
 where table_name = 'myTable'
select column_name, data_type, character_maximum_length    
  from information_schema.columns  
 where table_name = 'myTable'
你丑哭了我 2024-11-09 06:13:47

特别是在 SQL Server 上:

SELECT DATALENGTH(Remarks) AS FIELDSIZE FROM mytable

文档

On SQL Server specifically:

SELECT DATALENGTH(Remarks) AS FIELDSIZE FROM mytable

Documentation

小耗子 2024-11-09 06:13:47

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

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

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

COLUMNPROPERTY 文档

For SQL Server (2008 and above):

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

COLUMNPROPERTY returns information for a column or parameter (id, column/parameter, property). The PRECISION property returns the length of the data type of the column or parameter.

COLUMNPROPERTY documentation

≈。彩虹 2024-11-09 06:13:47

这将在 SQL SERVER 上运行...

SELECT COL_LENGTH('Table', 'Column')

This will work on SQL SERVER...

SELECT COL_LENGTH('Table', 'Column')
淡淡的优雅 2024-11-09 06:13:47

我正在寻找列的总大小并点击了这篇文章,我的解决方案基于 MarcE 的。

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

I was looking for the TOTAL size of the column and hit this article, my solution is based off of MarcE's.

SELECT sum(DATALENGTH(your_field)) AS FIELDSIZE FROM your_table
筱武穆 2024-11-09 06:13:47
select column_name, data_type, character_maximum_length    
from INFORMATION_SCHEMA.COLUMNS
where table_name = 'Table1'
select column_name, data_type, character_maximum_length    
from INFORMATION_SCHEMA.COLUMNS
where table_name = 'Table1'
笑着哭最痛 2024-11-09 06:13:47

这是计算 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]();

This is a function for calculating max valid length for 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

Usage:

IF LEN(@Name) > [dbo].[GetMaxVarcharColumnLength]('person', 'FamilyStateName', 'Name') 
            RETURN [dbo].[err_Internal_StringForVarcharTooLong]();
快乐很简单 2024-11-09 06:13:47

对于 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

For t-SQL I use the following query for varchar columns (shows the collation and is_null properties):

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
心房敞 2024-11-09 06:13:47

对于 MS SQL Server,这将返回列长度:

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

For MS SQL Server this will return column length:

SELECT COL_LENGTH('dbo.mytable', 'Remarks') AS Result;
潜移默化 2024-11-09 06:13:47

对于 SQL Server,我们可以使用 LEN 代替 SIZE,剩下的问题中给出的一切都很好。 LEN 返回字符数,不确定我应该称其为“眼睛友好”还是“大脑友好”:)

SELECT LEN(Remarks) FROM mytable

DATALENGTH 也可以正常工作,如其他答案中给出的那样,但它返回字节数。

SELECT DATALENGTH(Remarks) FROM mytable

这里是文档参考

For SQL Server, instead of SIZE we can use LEN rest everything given in question is fine. LEN returns number of characters, not sure I should call it eye friendly or brain friendly :)

SELECT LEN(Remarks) FROM mytable

DATALENGTH also works fine as given in other answers but it returns number of bytes.

SELECT DATALENGTH(Remarks) FROM mytable

Here is documentation reference

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文