order by 질문 드립니다. 채택완료
안녕하세요.
아래와 같이 데이터가 존재한다고 가정 합니다.
------------
기억하니A1
기억하니A2
기억하니B1
바보하니A1
기억하니A10
------------
정렬을 시키면
기억하니A1
기억하니A10
기억하니A2
기억하니B1
바보하니A1
이렇게 "기억하니A2" 보다 "기억하니A10" 이 먼저 나오게 됩니다.
아래처럼 가지런히 정렬이 되려면 어떻게 해야 될까요?
기억하니A1
기억하니A2
기억하니A10
기억하니B1
바보하니A1
많은 조언 부탁 드립니다.
답변 5개
저장시킬때 문자열을 정규식으로 치환해서
col1 에는 원본 문자열 그대로
col2 에는 뒤에 숫자를 제외한 문자열만
col3 에는 뒤에 숫자만
이렇게 저장하시고,
꺼내올때 정렬을 order by col2,col3 하면 되요..
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
저도 먼저 답변 다신분들 처럼 저렇게만 생각했는데...혹시 하고 찾아보니 이런것도 있네요.
https://java119.tistory.com/82
아마 원하시는 방향이 이게 맞으실거 같아요.
답변에 대한 댓글 1개
규직척인 문자가 동일하게 포함되었을때 가능한 방법 같습니다.
감사합니다~!
댓글을 작성하려면 로그인이 필요합니다.
https://stackoverflow.com/questions/12097368/mysql-order-by-string-with-numbers
https://bytes.com/topic/mysql/answers/881790-mysql-natural-sort
숫자가 나오는 위치가 고정이라면 쓸 수 있겠네요.
아니면
A1 대신 A01로 저장하세요.
답변에 대한 댓글 2개
입력 값에는 규칙이 없는 상황입니다. 입력값 규칙이 없는 상태에서 정렬이 가능할까 궁금합니다.
숫자 자릿수를 일정하게 0으로 앞 부분은 채워야 합니다.
아니면 컬럼을 분리하던게 해야죠.
댓글을 작성하려면 로그인이 필요합니다.
A10 과 A2 는 문자열로 볼때는 A10 이 우선이기 때문입니다.
컬럼을 쪼개어 쓰시면 될것 같습니다.
order by col1,col2
답변에 대한 댓글 2개
문자와 숫자를 애초에 DB에서 구분해서 저장하라는 말씀인듯 합니다.
문자 숫자
기억하니A 1
기억하니A 2
기억하니B 1
바보하니A 1
기억하니A 10
이렇게 나눠버리면 그냥 간단하게 order by에서 문자 숫자 둘 다 적용하면 되니깐요
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인