반응형
데이터타입이 문자형인데 숫자값이 들어가서 사용하는 경우가 있습니다. 이럴경우 Order By문을 사용해서 정렬을 하면 문자열로 정렬이 되어 원치않는 결과값이 나오는 경우가 있습니다. 이때 숫자값으로 변환해서 정렬하는 방법에 대해 알아보겠습니다.
방법1. Convert를 이용하여 숫자형으로 변환후 조회
1
2
3
|
SELECT *
FROM [AdventureWorks2014].[HumanResources].[Employee]
Order By Convert(int, NationalIDNumber)
|
방법2. Len함수를 사용하여 정렬
NationalIDNumber필드의 경우 nvarchar형으로 선언이 되어 있고 실제로는 숫자형값이 들어간다고 가정하고 테스트를 해보도록 하겠습니다. Orber By문을 통해서 정렬을 해보면 아래와 같이 숫자가 낮은값으로 정렬되는게 아니고 문자열로 정렬이 되어 아래와 같이 1로시작하는 문자열을 모두 출력 후 2,3,4로 넘어가는 것을 확인 할수 있습니다.
1. Convert를 이용하여 숫자형으로 변환후 조회
Convert함수를 사용하여 문자형필드를 숫자형으로 조회하면 아래와 같이 숫자값으로 정렬되어 출력되는 부분을 확인할 수 있습니다.
Convert함수를 사용하다보니 해당필드값에 숫자가 아닌 문자값이 있을 경우 아래와 같이 형변환 오류가 발생합니다.
2. Len함수를 사용하여 정렬
Len함수를 사용해서 먼저 길이로 비교한다음,다시한번 해당필드값으로 조건을 추가해주면됩니다.
Order By Len(NationalIDNumber),NationalIDNumber
Convert함수, Len함수를 사용하여 정렬시 속도비교
예상 실행계획 메뉴를 사용해서 살펴보면 쿼리 속도가 동일하게 50%비중으로 처리되는 부분을 확인 할 수 있습니다.숫자형필드로 사용해서 하는방법이 좋으나 이미 구축되어져있거나 상황에 따라 문자열로 설계를 해야될 경우에는 위에서 살펴본 부분과 같이 Convert함수나 Len함수를 사용해서 정렬을 하면됩니다. 속도에 대한부분은 테스트 해본결과 큰 차이는 없었고 실제데이터로 테스트를 한번 해본 후 사용하면 됩니다. Convert함수는 형변환 오류에 대한부분이 발생 할 수 있으니 Len함수를 사용하는게 좋아보이나 상황에 따라 Convert함수를 사용해서 예외가 발생하게 하지 않게 하는 경우도 있을것으로 보입니다. 적절하게 사용하면 될 것 같습니다.
1
2
3
|
SELECT *
FROM [AdventureWorks2014].[HumanResources].[Employee]
Order By Len(NationalIDNumber),NationalIDNumber
|
NationalIDNumber필드의 경우 nvarchar형으로 선언이 되어 있고 실제로는 숫자형값이 들어간다고 가정하고 테스트를 해보도록 하겠습니다. Orber By문을 통해서 정렬을 해보면 아래와 같이 숫자가 낮은값으로 정렬되는게 아니고 문자열로 정렬이 되어 아래와 같이 1로시작하는 문자열을 모두 출력 후 2,3,4로 넘어가는 것을 확인 할수 있습니다.
1. Convert를 이용하여 숫자형으로 변환후 조회
Convert함수를 사용하여 문자형필드를 숫자형으로 조회하면 아래와 같이 숫자값으로 정렬되어 출력되는 부분을 확인할 수 있습니다.
Convert함수를 사용하다보니 해당필드값에 숫자가 아닌 문자값이 있을 경우 아래와 같이 형변환 오류가 발생합니다.
2. Len함수를 사용하여 정렬
Len함수를 사용해서 먼저 길이로 비교한다음,다시한번 해당필드값으로 조건을 추가해주면됩니다.
Order By Len(NationalIDNumber),NationalIDNumber
Convert함수, Len함수를 사용하여 정렬시 속도비교
예상 실행계획 메뉴를 사용해서 살펴보면 쿼리 속도가 동일하게 50%비중으로 처리되는 부분을 확인 할 수 있습니다.숫자형필드로 사용해서 하는방법이 좋으나 이미 구축되어져있거나 상황에 따라 문자열로 설계를 해야될 경우에는 위에서 살펴본 부분과 같이 Convert함수나 Len함수를 사용해서 정렬을 하면됩니다. 속도에 대한부분은 테스트 해본결과 큰 차이는 없었고 실제데이터로 테스트를 한번 해본 후 사용하면 됩니다. Convert함수는 형변환 오류에 대한부분이 발생 할 수 있으니 Len함수를 사용하는게 좋아보이나 상황에 따라 Convert함수를 사용해서 예외가 발생하게 하지 않게 하는 경우도 있을것으로 보입니다. 적절하게 사용하면 될 것 같습니다.
'프로그래밍 > DB' 카테고리의 다른 글
[DB] MSSQL 사용자정의 함수 만들기 (0) | 2022.08.30 |
---|---|
[DB] MSSQL 저장프로시저 디버그 (0) | 2022.08.23 |
[DB] MSSQL DELETE TOP문 사용하여 대용량 데이터 삭제하기 (0) | 2021.10.04 |
[DB] MSSQL 조회결과를 JSON으로 (for json auto) (0) | 2021.09.10 |
[DB] MSSQL pubs, northwind 예제 디비설치 (2) | 2021.09.08 |