ดึงข้อมูลความยาวสูงสุดของคอลัมน์ VARCHAR ใน SQL Server


90

ฉันต้องการค้นหาVARCHARคอลัมน์ที่ยาวที่สุดในคอลัมน์เฉพาะของตาราง SQL Server

นี่คือตัวอย่าง:

ID = INT IDENTITY
DESC = VARCHAR(5000)

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

SQL ที่จะส่งคืน 3 คืออะไร? เนื่องจากค่าที่ยาวที่สุดคือ 3 ตัวอักษร?

คำตอบ:


170

ใช้ฟังก์ชันในตัวสำหรับความยาวและสูงสุดในคอลัมน์คำอธิบาย:

SELECT MAX(LEN(DESC)) FROM table_name;

โปรดทราบว่าหากตารางของคุณมีขนาดใหญ่มากอาจมีปัญหาด้านประสิทธิภาพ


ขอบคุณฉันมีสมองที่ผายลมและจำฟังก์ชัน LEN กลางคำถามได้ แต่คิดว่ามันน่าจะดีที่มีที่นี่ ขอบคุณเพื่อน!
Milo LaMar

17
เพียงหมายเหตุหากคุณต้องการทราบขนาดที่ต่างจากจำนวนอักขระให้ใช้DATALENGTH(เนื่องจากคุณอาจใช้NVARCHARในบางสถานที่หรือสักวันหนึ่ง)
Aaron Bertrand

37

สำหรับmysqlความยาวไม่ได้รับการผ่อนปรน

SELECT MAX(LENGTH(Desc)) FROM table_name

1
ฟังก์ชัน 'LENGTH' เดียวกันสำหรับ postgresql เช่นกัน (ไม่ใช่ 'LEN')
dimuthu

19

ระวัง!! หากมีช่องว่างพวกเขาจะไม่ได้รับการพิจารณาโดยวิธี LEN ใน T-SQL อย่าปล่อยให้เคล็ดลับนี้คุณและใช้

select max(datalength(Desc)) from table_name

จุดดี. ตามความเป็นจริงแล้ว varchars 'asd' และ 'asd' ได้รับการปฏิบัติเหมือนกันโดย SQL Server (ยกเว้นในประโยค LIKE) ตรวจสอบรายละเอียด: support.microsoft.com/en-us/help/316626/…
sotn

9

สำหรับ Oracle มันยังเป็น LENGTH แทน LEN

SELECT MAX(LENGTH(Desc)) FROM table_name

นอกจากนี้ DESC ยังเป็นคำสงวน แม้ว่าคำสงวนจำนวนมากจะยังใช้ได้กับชื่อคอลัมน์ในหลาย ๆ สถานการณ์ แต่การทำเช่นนั้นก็ไม่ดีและอาจทำให้เกิดปัญหาได้ในบางสถานการณ์ พวกเขาสงวนไว้ด้วยเหตุผล

หากใช้คำว่า Desc เป็นเพียงตัวอย่างควรสังเกตว่าไม่ใช่ทุกคนที่จะตระหนักถึงสิ่งนั้น แต่หลายคนจะรู้ว่าเป็นคำสงวนสำหรับ Descending โดยส่วนตัวแล้วฉันเริ่มต้นด้วยการใช้สิ่งนี้แล้วพยายามหาว่าชื่อคอลัมน์ไปที่ใดเพราะทั้งหมดที่ฉันมีเป็นคำสงวน ใช้เวลาไม่นานในการคิดออก แต่ควรคำนึงถึงเรื่องนี้เมื่อตัดสินใจว่าจะใช้อะไรแทนชื่อคอลัมน์จริงของคุณ


7

ให้จำนวนระเบียนสูงสุดในตาราง

select max(len(Description))from Table_Name

ให้บันทึกที่มีจำนวนมากขึ้น

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

ความหวังช่วยใครบางคน



2

สำหรับ SQL Server (SSMS)

select MAX(LEN(ColumnName)) from table_name

สิ่งนี้จะส่งกลับจำนวนอักขระ

 select MAX(DATALENGTH(ColumnName)) from table_name

สิ่งนี้จะส่งคืนจำนวนไบต์ที่ใช้ / จำเป็น

ถ้ามีใครใช้ varchar ก็ใช้DATALENGTH. รายละเอียดเพิ่มเติม


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

2
แม้ว่าข้อมูลโค้ดนี้อาจเป็นวิธีแก้ปัญหา แต่การมีคำอธิบายจะช่วยปรับปรุงคุณภาพของโพสต์ของคุณได้มาก โปรดจำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตและบุคคลเหล่านั้นอาจไม่ทราบสาเหตุของการแนะนำโค้ดของคุณ
HMD

+1 เพื่อชี้ให้เห็นว่าฉันใช้คำหลัก SQL Server DESC เป็นชื่อคอลัมน์ซึ่งอนุญาตด้วยเหตุผลบางประการ LOL
Milo LaMar

การสะกดคำที่ถูกต้องอาจมีความสำคัญเนื่องจากการอ่านบางคนอาจไม่ทราบว่า 'ความยาว' ในคำตอบนั้นเป็นการพิมพ์ผิดสำหรับ 'ความยาว' (ไม่ใช่ว่าควรทำให้เกิดข้อผิดพลาด)
Jean-Claude DeMars

1

หลายครั้งที่คุณต้องการระบุแถวที่มีคอลัมน์นั้นยาวที่สุดโดยเฉพาะอย่างยิ่งหากคุณกำลังแก้ไขปัญหาเพื่อค้นหาว่าเหตุใดความยาวของคอลัมน์บนแถวในตารางจึงยาวกว่าแถวอื่น ๆ มาก แบบสอบถามนี้จะให้คุณมีตัวเลือกในการแสดงตัวระบุบนแถวเพื่อระบุว่าเป็นแถวใด

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.