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 구문을 써봐도 원하는값을 못가져와 이렇게 문의드립니다.
억지로 만들 수는 있겠지만.
순서를 바꾸는 건 어떨런지요?
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 ;