2011-04-18 25 views
53

Giả sử rằng tôi có một bảng SQL có một trường varchar [1000] được gọi là "Ghi chú".Làm thế nào để có được kích thước của một trường varchar [n] trong một câu lệnh SQL?

Tôi muốn tạo một câu lệnh SQL, khi được thực hiện, sẽ trả về 1000 hoặc bất kỳ kích thước nào của trường varchar có thể được thay đổi trong tương lai.

Giống như SELECT size(Remarks) FROM mytable.

Làm cách nào để thực hiện việc này?

+0

Điều này sẽ phụ thuộc vào RDBMS bạn đang làm việc. Nhưng khi Neil nói bạn có thể phải tìm kiếm trong lược đồ thông tin của máy chủ của bạn. –

Trả lời

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

bạn có thể chỉ định mệnh đề bổ sung 'AND column_name =' Ghi chú'' nếu bạn chỉ muốn lọc một cột. –

+1

Chỉ cần thông tin, đây là một truy vấn cụ thể của MySQL. – pickypg

+1

Tuy nhiên, nó không hoạt động trong Oracle. – pickypg

21

Mở SQL Server cụ thể:

SELECT DATALENGTH(Remarks) AS FIELDSIZE FROM mytable 

Documentation

+2

Câu lệnh này trả về độ dài của dữ liệu đã được nhập. Tôi muốn kích thước của dữ liệu mà trường sẽ giữ. –

+0

Rất tiếc- Tôi nên đọc kỹ các câu hỏi trong tương lai! – MarcE

+1

Nếu bạn đăng mã, XML hoặc mẫu dữ liệu, hãy ** làm nổi bật những dòng đó trong trình soạn thảo văn bản và nhấp vào nút "mẫu mã" ('{}') trên thanh công cụ trình soạn thảo để định dạng và cú pháp tô sáng nó! –

2

tôi đang tìm kiếm kích thước TỔNG của cột và nhấn bài viết này, giải pháp của tôi là dựa tắt của Marce của.

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

đâu là một hàm để tính chiều dài có giá trị tối đa cho 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 

Cách sử dụng:

IF LEN(@Name) > [dbo].[GetMaxVarcharColumnLength]('person', 'FamilyStateName', 'Name') 
      RETURN [dbo].[err_Internal_StringForVarcharTooLong](); 
3

này sẽ làm việc trên SQL SERVER ...

SELECT COL_LENGTH('Table', 'Column') 
+0

Cần lưu ý rằng điều này sẽ trả về độ dài bằng * byte *, do đó bạn sẽ phải giảm một nửa nó cho 'NVARCHAR' hoặc' NCHAR' chẳng hạn. Xem https://docs.microsoft.com/en-us/sql/t-sql/functions/col-length-transact-sql –

0

Đối với t-SQL tôi sử dụng truy vấn sau đây cho var cột char (thể hiện đối chiếu và tính 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 
0
select column_name, data_type, character_maximum_length  
from INFORMATION_SCHEMA.COLUMNS 
where table_name = 'Table1' 
3

Đối với SQL Server (2008 trở lên):

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

COLUMNPROPERTY trả về thông tin cho một cột hoặc tham số (id, cột/tham số, thuộc tính). Thuộc tính PRECISION trả về độ dài của kiểu dữ liệu của cột hoặc tham số.

COLUMNPROPERTY documentation

Các vấn đề liên quan