2011-02-09 21 views
3

をするための適切な結果を与えるものではありませんOracleの順序は非文字列

select * from table order by col1 asc 

正しく注文します。 (すなわち、日付の場合は、最も古いものから最新のものへ、数字は低いものから高いものへ) しかし、もしそうなら、select * from table order by upper(col1) asc の順序が正しくありません。

この現象の原因は何ですか?

+2

col1のデータ型は?また、 "not correct"の例を追加する必要があります。ここからあなたのモニターを見ることができません –

+0

文字列でない列の上(col)で注文を使用して達成したい結果は何ですか? – jachguate

+0

@jachguate。これは私の理解のためだけです。ビジネス目的なし – Victor

答えて

7

UPPERは文字列を受け取り、文字列を返します。 col1が文字列以外の場合は、関数が実行される前に文字列に暗黙的にキャストする必要があります。ただし、UPPER関数の出力は文字列であるため、ソートの意味は文字列のソートの意味であり、ソートの意味はcol1ではありません。 col1はUPPER(9)の文字列を返し例えば

  • 、数値の場合は '9'
  • UPPER(10)文字列 '10'

文字列を返します '9' の後にアルファベット順に来ますおそらく、あなたが見ている問題である文字列 '10'。

しかし、col1が文字列でない場合、ソートするために大文字に変換するのはどうですか?

+0

問題を非常に正確に予測してくれてありがとう。 – Victor

関連する問題