VARCHAR
SQL Server 테이블의 특정 열에서 가장 긴 항목을 찾고 싶습니다 .
예를 들면 다음과 같습니다.
ID = INT IDENTITY
DESC = VARCHAR(5000)
ID | Desc
---|-----
1 | a
2 | aaa
3 | aa
3을 반환하는 SQL은 무엇입니까? 가장 긴 값은 3 자이므로?
답변:
설명 열에서 길이 및 최대에 대한 내장 함수를 사용하십시오.
SELECT MAX(LEN(DESC)) FROM table_name;
테이블이 매우 크면 성능 문제가있을 수 있습니다.
DATALENGTH
( NVARCHAR
일부 장소 또는 언젠가 사용할 수 있으므로)를 사용하십시오 .
조심해!! 공백이있는 경우 T-SQL의 LEN 메서드에서 고려되지 않습니다. 이 속임수를 사용하지 마십시오.
select max(datalength(Desc)) from table_name
Oracle의 경우 LEN 대신 LENGTH입니다.
SELECT MAX(LENGTH(Desc)) FROM table_name
또한 DESC는 예약어입니다. 많은 예약어가 많은 상황에서 열 이름에 대해 여전히 작동하지만 그렇게하는 것은 좋지 않으며 일부 상황에서 문제를 일으킬 수 있습니다. 이유 때문에 예약되어 있습니다.
Desc라는 단어가 단지 예로 사용 되었다면 모든 사람이 그것을 깨닫지는 않을 것이지만 많은 사람들은 그것이 Descending에 대한 예약어라는 것을 깨닫게 될 것입니다. 개인적으로 저는 이것을 사용하여 시작한 다음 내가 가진 모든 것이 예약어 였기 때문에 열 이름이 어디로 갔는지 알아 내려고했습니다. 알아내는 데 오래 걸리지 않았지만 실제 열 이름을 대체 할 항목을 결정할 때이를 염두에 두십시오.
SELECT TOP 1 column_name, LEN(column_name) AS Lenght FROM table_name ORDER BY LEN(column_name) DESC
예를 들어 테이블의 행에있는 열의 길이가 다른 어떤 행보다 긴 이유를 알아 내기 위해 문제를 해결하는 경우 가장 긴 길이를 가진 해당 열이있는 행을 여러 번 식별하려고합니다. 이 쿼리는 행을 식별하기 위해 행에 식별자를 나열하는 옵션을 제공합니다.
select ID, [description], len([description]) as descriptionlength
FROM [database1].[dbo].[table1]
where len([description]) =
(select max(len([description]))
FROM [database1].[dbo].[table1]