Oracle DB를 사용하고 있는데,
MENU라는 테이블에 varchar 형태의 MENU_NM 컬럼이 있을 때,
여기에 데이터가 이런 식으로 들어 있습니다.
| 28nm |
| 40nm |
| 65nm |
| 90nm |
| 110nm |
| 130nm |
| 180nm |
| 350nm |
| 500nm |
| AAA |
이렇게 있을 때
SELECT * FROM MENU 쿼리에서 ORDER BY를 수행할 때,
nm이 붙어있는 값은 nm을 떼고 숫자로 변환 후 정렬,
AAA 처럼 숫자로 변형이 불가한 값은 나머지 순서대로 정렬
이렇게 가능한가요?
ORDER BY 절에서 정렬 순서를 정하면 될 듯합니다. SELECT menu_nm FROM menu ORDER BY TO_NUMBER(REGEXP_REPLACE(menu_nm, '[^0-9]', '')) , menu_nm
답변 감사합니다! 덕분에 잘 해결하였습니다!
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 ;
감사합니다!! pajama님의 답변을 적용하게 되어서 답변으로 채택했습니다 ㅎㅎ 항상 감사합니다.