2011-02-09 5 views
3

을위한 적절한 결과를 제공하지 않습니다오라클 순서가 아닌 문자열 열

select * from table order by col1 asc 

제대로 주문하십시오. (즉, 날짜는 가장 오래된 것부터 가장 최근의 것까지 숫자로, 가장 낮은 것부터 가장 높은 것까지) 하지만 내가하는 경우 select * from table order by upper(col1) asc 주문이 잘못되었습니다.

이 동작의 원인은 무엇입니까?

+2

col1의 데이터 유형은 무엇입니까? 또한 "올바르지 않은"예제를 추가해야합니다. 여기에서 귀하의 모니터를 볼 수 없습니다 –

+0

문자열이 아닌 열에서 upper (col)로 주문을 사용하여 얻으려는 결과는 무엇입니까? – jachguate

+0

@jachguate. 이것은 내 이해를위한 것입니다. 사업 목적이 없음 – Victor

답변

7

UPPER는 문자열을 취해 문자열을 반환합니다. col1이 문자열이 아닌 경우 함수가 실행되기 전에 문자열로 암시 적으로 형변환되어야합니다. 그러나 UPPER 함수의 출력이 문자열이기 때문에 정렬은 col1의 정렬 의미가 아닌 문자열 정렬 의미를 사용해야합니다. col1 예를 들어,

  • UPPER 숫자 인 경우 (9) '9'
  • UPPER가 (10) 문자열 '10'

문자열이 반환 '9'문자열을 반환 한 후 순 온다 문자열 '10'은 아마도 여러분이보고있는 문제 일 것입니다.

그러나 col1이 문자열이 아닌 경우 정렬을 위해 대문자로 변환하는 것이 왜 불편합니까?

+0

문제를 너무 정확하게 예측해 주셔서 감사합니다. – Victor

관련 문제