- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字列のフィールドのOrderbyについて)
文字列フィールドのOrderbyについて
このQ&Aのポイント
- Oracle9iの環境で文字列のフィールドを使用したOrderbyを実行する際に、想定外の結果が生じることがあります。
- 特に、文字列と数字が混在している場合や、文字列の大小比較が正しく行われないケースで問題が発生します。
- フィールドのデータ型やSQLの条件文を変更することで、正しい結果を得る方法がありますが、テーブル構造によっては問題が解決しない場合もあります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
客観的な意見になりますが、ご了承ください。 まず、コードに文字列型を使用する以上、 「1」と「11」を混在させる方法はどうかと思います。 例えば、1,2,3,・・・,10,11 というようにデータがあったとしますと、 これをソートした結果を見てみてください。 1,10,11,2,3・・・ という順序で結果が出てくると思います。 一般論としてデータベース内のコードは同じ桁数であるべきですし、 同じコード体型であるべきです。 今回、ご質問いただきましたコード設計で 10 桁となっているのなら、 仮に区分も何も無い、ただの数値項目であるであれば、 「0000000001」と「0000000011」とあるべきです。 そうすれば、 「Between '0000000001' AND '0000000004'」 という条件が 組めますよね? あと、余談ですが、仮にこのプログラムが組めたとして、 パフォーマンス的に考えると、「SELECT * FROM ~」を使うことは 好ましくありません。 検索する項目を列挙する書き方へしたほうが、 パフォーマンス向上に繋がりますよ。 参考まで。
その他の回答 (1)
- SUPER-NEO
- ベストアンサー率38% (706/1857)
回答No.2
#1です。 既に設計の話になってしまっているようですが、 ご参考までに。 旧データのコードと新データのコードの2種類を持つことはできないんですか? 検索用に新コードを用意して、これを条件で使用するというものですが。
質問者
お礼
検索用に新コードですか・・・ がんばって導入してみます。 ありがとうございました。
お礼
ほぼ予想通りの回答ですね。 >一般論としてデータベース内のコードは同じ桁数であるべきですし 実は、なぜこの質問をしたかというと、 旧システムが桁数がバラバラなんですよね。 新システム移行の際、旧データの書き換えを禁止されているので、お客様にどう持っていくのか悩んでいます。 ありがとうございました。