MSSQL 쿼리 질문드립니다. 0 2 561

by 고쿠 [2021.08.30 10:30:13]


with t (ch) as (
select 'AAAA' union all
select 'AAAB' union all
select 'AAAC' union all 
select '1AAA' union all 
select '93AA'
)

 

위 처럼 데이터가 뒤에서부터 알파벳이 Z까지 순차적으로 증가하여

ZZZZ가되면 앞자리부터 1AAA로 바뀌고 9999로 끝나는 데이터입니다.

가장 큰값을 가져와야하는데 문자열만 있을때는 AAAC가 가장 큰값이고,

숫자랑 같이있을떄는 93AA가 가장 큰값입니다.

order by case 구문을 써봐도 원하는값을 못가져와 이렇게 문의드립니다.

by 마농 [2021.08.30 11:07:28]

억지로 만들 수는 있겠지만.
순서를 바꾸는 건 어떨런지요?
0000 으로 시작해서 ZZZZ 으로 끝나는 형태로
이러면 별도 가공 없이 쉽게 MAX 값을 구할 수 있습니다.
참고로. Translate 함수는 2017 버전부터 지원.

-- 1. 숫자를 소문자로 변경 후 Binary 정렬 --
SELECT TOP (1) ch
  FROM t
 ORDER BY TRANSLATE(ch, '0123456789', 'abcdefghij') COLLATE Korean_Wansung_BIN DESC
;

-- 2. 알파벳의 개수로 1차 정렬 --
SELECT TOP (1) ch
  FROM t
 ORDER BY LEN(LTRIM(TRANSLATE(ch, '0123456789', '          '))), ch DESC
;

 


by 고쿠 [2021.08.30 11:24:11]

데이터 순서는 알파벳 -> 숫자로 끝나는걸로 정해져있어

제가 바꿀수는 없는 상태입니다.ㅜㅜ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입