こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

OracleとAccessの出力順の違い

AccessからOracleにデータをインポートし、同じ内容のクエリーでデータの抽出を行いましたが、
出力結果の出力順が一致しません。

CD 名称
---------
11 アアア
12 いいい
13 ううう
14 エエエ

上のような表(表名:得意先)から

SELECT CD, 名称
FROM 得意先
ORDER BY 名称;

というクエリーでデータ抽出を行うと、
Accessの場合は上の表通りの出力順で結果が表示されますが、
Oracleの場合、

CD 名称
---------
12 いいい
13 ううう
11 アアア
14 エエエ

というように、出力順がひらがな優先で抽出されてしまいます。

Oracle Database 10g Enterprise Edition Release 10.1.0.2.0と
Access2000を使用しています。
Oracleの設定等で回避できるものなのでしょうか?
または抽出クエリーを変更すれば同じ結果が得られるものなのでしょうか?
(出来ればクエリーの変更はしたくありません)

どなたかお分かりの方、よろしくお願いします。

投稿日時 - 2005-02-01 12:59:08

QNo.1196345

すぐに回答ほしいです

質問者が選んだベストアンサー

マニュアルを見ると、できるかもしれないですね。

SQLのNLSSORT関数で、NLS_SORT初期パラメータを
エミュレートできますので
ORDER BY NLSSORT(col, 'Japanese_Japan.JA16SJISTILDE') で やってみてください。

投稿日時 - 2005-02-01 14:19:50

お礼

実際に試してみたいと思います。
ありがとうございます。

投稿日時 - 2005-02-01 15:57:55

ANo.3

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(4)

>#3

オラクルのソートは、マルチバイト圏の言語については、バイナリソートのみ
対応しているはずです。
SJIS,EUC,UTF8いずれのキャラクタセットも、”あアいイ・・”の順で
バイナリが並ぶものはないので、標準機能で対応することは出来ないモノ
と思います。

NLSをカスタマイズして、バイナリ順が”あアいイ・・”の順で並ぶよう
キャラクタセットと作れば、NLSSORT関数なり、CONVERT関数なりで、
ソートキーを作れると思います。

なので、ACCESSの照合順をマネをするには、大変な労力が必要になると
思われます。

投稿日時 - 2005-02-02 13:16:28

お礼

結構大変な作業っぽいですね。
ソート順が異なる原因については理解できました。
ありがとうございました。

投稿日時 - 2005-02-02 15:46:28

ANo.2

GoF

Accessはよく知らないのですが
AccessはSJISをバイナリソート

Oracleは EUCでバイナリソートの設定(デフォルト)のように思えます。
Oracleは、EUC でDBを構築されてませんか?(unix系かな?)

Oracleには、NLS_SORTパラメータでソートを制御できますが
NLSでの設定では質問のとおりの並び替えは、恐らく不可能だと思います。

自分が思い浮かんだのは

1. DBをSJISで作りなおす。
2. ORDER BY に CONVERTを入れてSJISでソートする。

くらいです。
自サーバが壊れてしまったので、動作確認はできないので
動作保証できませんので、あしからず。

投稿日時 - 2005-02-01 14:05:39

ANo.1

AccessとOracleの文字の判定方法の違いだと思います。

Oracleでは文字コード順で判断していますが、Accessではカナ順をみているのでしょう。

これはDBの仕様ですので、変更は出来ないと思います。

名称でなくてCDの方をソートキーにする訳にはいかないのでしょうか?

無理だとすれば、別途にフィールドを追加してソート順の基準となるものをいれるしかないと思います(全部カタカナの名称カナフィールドを作るとか)。

投稿日時 - 2005-02-01 13:46:48

お礼

AccessとOracleの違いということですか。
ありがとうございました。

投稿日時 - 2005-02-01 14:04:52

あなたにオススメの質問