2012-10-17 3 views
2

을 검색하는 같은 것을 할 수있는 주문 번호 (orderNum) 다음정렬 데이터 열이 나는라는 데이터의 열이 최대 텍스트 값

1124, 203, 5467, MANUAL1, MANUAL34, DEMO12, DEMO998, INTERNAL2312, INTERNAL232

본질적으로, 나는 SQL을 쓸 필요를 쿼리를 사용하여 특정 유형의 "가장 큰"주문 번호를 검색합니다. 정수가되는 실제 주문은 간단하지만, MySQL이 VARCHAR으로 처리하는 정렬은 조금 엉성합니다. 위의 데이터 세트에서 다음 수동 주문 번호를 찾는 경우 MANUAL34이 마지막으로 사용한 수동 주문 번호, INTERNAL2312, DEMO12 (숫자가 1 씩 순차적으로 올라갑니다)이라고 말할 수 있어야합니다. 전체 열을 제거하고 Java 웹 서비스에서 정렬하지 않고도이를 수행 할 수있는 방법이 있습니까?

+0

여기 진짜 문제는'orderNum' 필드는'order' 엔티티의 두 가지 속성이 결합된다는 점이다 : 종류와 수를. 데이터베이스 스키마를 변경하여 해당 속성을 고유 한 컬럼으로 분리하는 것이 가장 좋습니다. – Xint0

+0

@ Xint0 절대적으로 맞지만이 시스템은 이미 불행하게도 생산되고 있습니다. 그래도 조언 주셔서 감사합니다. – thatidiotguy

답변

4

당신이 좋아하는 뭔가를 할 수 :

select * from testing where value like 'MANUAL%' 
order by CAST(right(value, length(value)-length('MANUAL')) as UNSIGNED) desc 
LIMIT 1 

Link to SQL Fiddle

+0

woooo, 훌륭합니다. 나는 이전에 사용했던 적이 한번도 보지 못했던 것처럼 사용했던 함수 ('cast','right')를 조사해야 할 것입니다. 고맙습니다! – thatidiotguy