Oracle Order by 관련 0 4 3,651

by COMAVLER [Oracle 기초] [2024.03.14 17:36:30]


Oracle DB를 사용하고 있는데,
MENU라는 테이블에 varchar 형태의 MENU_NM 컬럼이 있을 때,
여기에 데이터가 이런 식으로 들어 있습니다.
 

28nm
40nm
65nm
90nm
110nm
130nm
180nm
350nm
500nm
AAA

이렇게 있을 때 
SELECT * FROM MENU 쿼리에서 ORDER BY를 수행할 때,
nm이 붙어있는 값은 nm을 떼고 숫자로 변환 후 정렬,
AAA 처럼 숫자로 변형이 불가한 값은 나머지 순서대로 정렬

이렇게 가능한가요?

by pajama [2024.03.14 20:29:06]
ORDER BY 절에서 정렬 순서를 정하면 될 듯합니다.

SELECT menu_nm
FROM menu 
ORDER BY TO_NUMBER(REGEXP_REPLACE(menu_nm, '[^0-9]', '')) , menu_nm

 


by COMAVLER [2024.03.17 21:04:25]

답변 감사합니다! 덕분에 잘 해결하였습니다!


by 마농 [2024.03.14 21:49:08]
WITH menu AS
(
SELECT '28nm' menu_nm FROM dual
UNION ALL SELECT '40nm'  FROM dual
UNION ALL SELECT '65nm'  FROM dual
UNION ALL SELECT '90nm'  FROM dual
UNION ALL SELECT '110nm' FROM dual
UNION ALL SELECT '130nm' FROM dual
UNION ALL SELECT '180nm' FROM dual
UNION ALL SELECT '350nm' FROM dual
UNION ALL SELECT '500nm' FROM dual
UNION ALL SELECT 'AAA'   FROM dual
UNION ALL SELECT 'BB'    FROM dual
)
SELECT menu_nm
  FROM menu
 ORDER BY CASE WHEN menu_nm LIKE '%nm' THEN LPAD(menu_nm, 7, ' ') ELSE menu_nm END
;

 


by COMAVLER [2024.03.17 21:04:53]

감사합니다!! pajama님의 답변을 적용하게 되어서 답변으로 채택했습니다 ㅎㅎ 항상 감사합니다.

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