Lấy độ dài tối đa của cột VARCHAR trong SQL Server


87

Tôi muốn tìm cột dài nhất VARCHARtrong một cột cụ thể của bảng SQL Server.

Đây là một ví dụ:

ID = INT IDENTITY
DESC = VARCHAR(5000)

ID | Desc
---|-----
1  | a
2  | aaa
3  | aa

SQL trả về 3 là gì? Vì giá trị dài nhất là 3 ký tự?

Câu trả lời:


166

Sử dụng các hàm tích hợp cho độ dài và độ dài tối đa trên cột mô tả:

SELECT MAX(LEN(DESC)) FROM table_name;

Lưu ý rằng nếu bảng của bạn rất lớn, có thể có vấn đề về hiệu suất.


Cảm ơn bạn, tôi đã rất nhức óc và nhớ câu hỏi giữa hàm LEN nhưng nghĩ rằng dù sao cũng có thể có ở đây. Cảm ơn bạn đời!
Milo LaMar

17
Chỉ cần lưu ý, nếu bạn muốn biết kích thước thay vì số ký tự, hãy sử dụng DATALENGTH(vì bạn có thể sử dụng NVARCHARở một số nơi hoặc một ngày nào đó).
Aaron Bertrand

37

cho mysql chiều dài của nó không len

SELECT MAX(LENGTH(Desc)) FROM table_name

1
Cùng một hàm 'LENGTH' cho postgresql. (không phải 'LEN')
dimuthu

19

Coi chừng!! Nếu có khoảng trắng, chúng sẽ không được phương thức LEN trong T-SQL xem xét. Đừng để điều này lừa bạn và sử dụng

select max(datalength(Desc)) from table_name

Điểm tốt. Trên thực tế, các varchars 'asd' và 'asd' được SQL Server xử lý giống nhau (ngoại trừ trong mệnh đề LIKE). Để biết chi tiết, hãy kiểm tra: support.microsoft.com/en-us/help/316626/…
sotn

9

Đối với Oracle, nó cũng là LENGTH thay vì LEN

SELECT MAX(LENGTH(Desc)) FROM table_name

Ngoài ra, DESC là một từ dành riêng. Mặc dù nhiều từ dành riêng vẫn sẽ hoạt động cho tên cột trong nhiều trường hợp, nhưng việc làm như vậy là không tốt và có thể gây ra sự cố trong một số trường hợp. Chúng được bảo lưu vì một lý do.

Nếu từ Desc chỉ được sử dụng làm ví dụ, cần lưu ý rằng không phải ai cũng nhận ra điều đó, nhưng nhiều người sẽ nhận ra rằng đó là một từ dành riêng cho Descending. Cá nhân, tôi bắt đầu bằng cách sử dụng điều này, và sau đó cố gắng tìm ra vị trí của tên cột vì tất cả những gì tôi có là những từ dành riêng. Không mất nhiều thời gian để tìm ra, nhưng hãy ghi nhớ điều đó khi quyết định điều gì sẽ thay thế cho tên cột thực của bạn.


6

Cung cấp Tổng số bản ghi tối đa trong bảng

select max(len(Description))from Table_Name

Cho kỷ lục có số lượng nhiều hơn

select Description from Table_Name group by Description having max(len(Description)) >27

Hy vọng sẽ giúp được ai đó.



2

Đối với máy chủ sql (SSMS)

select MAX(LEN(ColumnName)) from table_name

Điều này sẽ trả về số ký tự.

 select MAX(DATALENGTH(ColumnName)) from table_name

Điều này sẽ trả về số byte được sử dụng / bắt buộc.

NẾU một số người sử dụng varchar thì hãy sử dụng DATALENGTH. Thêm chi tiết


1
SELECT TOP 1 column_name, LEN(column_name) AS Lenght FROM table_name ORDER BY LEN(column_name) DESC

2
Mặc dù đoạn mã này có thể là giải pháp, nhưng bao gồm phần giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
HMD

1 để chỉ ra tôi đã sử dụng một SQL Server từ khóa DESC như một tên cột, mà nó cho phép đối với một số lý do LOL
Milo Lamar

Đúng chính tả cũng có thể là quan trọng như một số đọc này có thể không nhận ra 'Dài' trong câu trả lời thực sự là một lỗi đánh máy cho 'chiều dài' (không phải là nếu nên gây ra lỗi)
Jean-Claude DeMars

1

Nhiều khi bạn muốn xác định hàng có cột đó với độ dài dài nhất, đặc biệt nếu bạn đang khắc phục sự cố để tìm ra lý do tại sao độ dài của một cột trên một hàng trong bảng lại dài hơn bất kỳ hàng nào khác. Truy vấn này sẽ cung cấp cho bạn tùy chọn liệt kê một số nhận dạng trên hàng để xác định đó là hàng nào.

select ID, [description], len([description]) as descriptionlength
FROM [database1].[dbo].[table1]
where len([description]) = 
 (select max(len([description]))
  FROM [database1].[dbo].[table1]

0

Đối với IBM Db2 CHIỀU DÀI của nó, không phải LEN:

SELECT MAX(LENGTH(Desc)) FROM table_name;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.