をするための適切な結果を与えるものではありませんOracleの順序は非文字列
select * from table order by col1 asc
正しく注文します。 (すなわち、日付の場合は、最も古いものから最新のものへ、数字は低いものから高いものへ) しかし、もしそうなら、select * from table order by upper(col1) asc
の順序が正しくありません。
この現象の原因は何ですか?
をするための適切な結果を与えるものではありませんOracleの順序は非文字列
select * from table order by col1 asc
正しく注文します。 (すなわち、日付の場合は、最も古いものから最新のものへ、数字は低いものから高いものへ) しかし、もしそうなら、select * from table order by upper(col1) asc
の順序が正しくありません。
この現象の原因は何ですか?
UPPERは文字列を受け取り、文字列を返します。 col1
が文字列以外の場合は、関数が実行される前に文字列に暗黙的にキャストする必要があります。ただし、UPPER関数の出力は文字列であるため、ソートの意味は文字列のソートの意味であり、ソートの意味はcol1
ではありません。 col1
はUPPER(9)の文字列を返し例えば
文字列を返します '9' の後にアルファベット順に来ますおそらく、あなたが見ている問題である文字列 '10'。
しかし、col1
が文字列でない場合、ソートするために大文字に変換するのはどうですか?
問題を非常に正確に予測してくれてありがとう。 – Victor
col1のデータ型は?また、 "not correct"の例を追加する必要があります。ここからあなたのモニターを見ることができません –
文字列でない列の上(col)で注文を使用して達成したい結果は何ですか? – jachguate
@jachguate。これは私の理解のためだけです。ビジネス目的なし – Victor