• ベストアンサー

文字型の順番がうまく並ばない。

よろしくお願いします。 WIN2000、VB6.0+Oracleで開発しています。 select文で実行すると並び順が違ってしまう。 文字型をソートすると「$ * 0~9 A~Z」の順番になってしまうのですが、これは普通なのでしょうか? 出来れば「$ * A~Z 0~9 」と並びたいのですが。 Select文 SELECT DISTINCT gkey,G01,G02,G03,G04,G05,G06,G07,G09,G10,to_char((G217+G227+G237+G247) , '9,999,999,999') AS ZissekiG ,G249 FROM SHYOUHIN WHERE G02 = '308' 結果 $ * 0~9 A~Z になってしまいます。 (Gkey) $00 $01 *02 *04 100 102 103 C00 N09 できれば  $ * A~Z 0~9 (Gkey) $00 $01 *02 *04 C00 N09 100 102 103 したいと思っています。ORDER BYでGkeyの指定してもうまくいかない…。 すいませんがどうしたら良いか、お願いします。

noname#69946
noname#69946
  • Oracle
  • 回答数3
  • ありがとう数5

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

  • ベストアンサー
回答No.2

>これは普通なのでしょうか? 普通です。 A-Z,0-9の並びは、EBCDICな文化を持つ環境で育った方には 自然な順番なんですが、unixやpcで使われるascii,sjis,eucでは、 0-9,A-Zの順番が普通です。 (EBCDICなコード順でソートする例) SELECT DISTINCT gkey,G01,G02,G03,G04,G05,G06,G07,G09,G10,to_char((G217+G227+G237+G247) , '9,999,999,999') AS ZissekiG ,G249 FROM SHYOUHIN WHERE G02 = '308' ORDER BY convert(gkey,'JA16EBCDIC930')

noname#69946
質問者

お礼

早速、ありがとうございます。 EBCDICというのは知りませんでした。 >ORDER BY convert(gkey,'JA16EBCDIC930') を足してやりましたらうまくいったのですが、$とSが同じと判断しているのでしょうか「Q→$→S」の順番になってしまいます。 これを回避する方法は無いでしょうか?

その他の回答 (2)

回答No.3

>>ORDER BY convert(gkey,'JA16EBCDIC930') >「Q→$→S」の順番になってしまいます。 >これを回避する方法は無いでしょうか? 少し思い違いをしてました。 ORDER BY convert(gkey,'JA16DBCS') を使って下さい。

noname#69946
質問者

お礼

素早い回答ありがとうございます。 おかげさまで解決しました。

  • iiikkk
  • ベストアンサー率37% (92/247)
回答No.1

SELECT DISTINCT gkey,G01,G02,G03,G04,G05,G06,G07,G09,G10,to_char((G217+G227+G237+G247) , '9,999,999,999') AS ZissekiG ,G249 FROM SHYOUHIN WHERE G02 = '308' order by gkey にしても駄目ですか? 駄目なら、Oracleのソートがそういう仕様なので、VBで独自にソートしてください。

noname#69946
質問者

お礼

早速ありがとうございます。 やはりダメなのでしょうか? 独自でソートする方法も考えてみます。

関連するQ&A

  • 文字型のwhere条件

    Oracleの初心者です、以下のSQL文は、助けてください。 Select * from RTM02AISM where TM02001 >= ' ' and TM02001 <= '゜゜゜゜゜゜゜゜゜゜゜' order by TM02001; TM02001はテーブルの中で11桁の文字型(CHAR)です。 文字型のwhere条件は、' 'と'゜゜゜゜゜゜゜゜゜゜゜' 組み合わせで、全てのTM02001列を表示できますか。 宜しくお願いします。

  • accessでDISTINCT 句と矛盾

    IIFで置き換えをした結果をソートしようとしましたが、 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,c [Microsoft][ODBC Microsoft Access Driver] ORDER BY 句 (c) が DISTINCT 句と矛盾しています。 というエラーになりました。 正しいSQLを教えてください。 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,b も試しましたが同じようにエラーになりました。

  • SQL文「DISTINCT」の「ORDER BY」について

    SQL文「DISTINCT」の「ORDER BY」について教えて下さい。 A列をDISTINCTで重複行の排除をしています。 その後、B列でORDER BYをかけたいのですが、エラーが 出てしまいます。A列でのORDER BYは成功します。 何か良い方法があれば教えて下さい。 よろしくお願いします。 SQL="SELECT DISTINCT A列 from table " &_ "WHERE (table.C列='100') " &_ "ORDER BY (table.B列) ASC " ⇒エラー    "ORDER BY (table.A列) ASC " ⇒成功

  • ORACLEでwhere句の検索順序

    Oracle9i windows2000です。 以下のようなテーブルがあります。 table_a ----------------------- id   NUMBER(10,0) NOT NULL, sort   NUMBER(10,0) NOT NULL, name   VARCHAR(10), text   VARCHAR(255) この条件で、以下のふたつのSELECT文を発行した時、パフォーマンスが良いのはどちらですか? Oracleでは後ろから検索されると聞いたことがあるのですが本当でしょうか? ※idにプライマリキー、 id,sortにインデックスが貼ってあります。 (1)SELECT text FROM table_a WHERE id = 1 AND sort = 2 AND name = 'a' (2)SELECT text FROM table_a WHERE name = 'a' AND sort = 2 AND id = 1

  • ソート(大文字・小文字を区別しない方法)

    Oracle10gとOracle9を利用しています。 SQL文でソートした結果を出力したいのですが、頭文字が大文字・小文字が混在しています。 ORDER BY句を使ってソートをすると、大文字でソート、小文字でソート という順番で並ぶと思いますが、大文字・小文字を区別せずにソートさせたいと考えています。 大文字・小文字を区別せずにソートさせる方法はありますか? ------------- TABLE1 ------------- ID NAME ------------- 001 Book 002 bar 003 boy 004 Byte ------------- SELECT NAME FROM TABLE1 ORDER BY NAME; ↓実行結果 ------------- Book Byte bar boy ------------- ↓出力した並び順 ------------- bar Book boy Byte ------------- ※「ALTER SESSION ST NLS_SORT=BINARY_CI」としてからソートすればOKという  情報がネットで見つかりましたが、Webアプリの中で実行させたいため、設定  は変えずに行いたいと思っています。可能ですか? よろしくお願いいたします。

  • もうちょっと賢いSELECT文が書けないものでしょうか

    初めまして、最近SQLをかじり始めたぺーぺーです。 効率の悪いSELECT文しか書けずに困っています。 下記のテーブルsoftware_tableから、 ・name列「oracle」 ・version値が最大 のレコードに含まれるid(=3)を拾ってきたいのですが、自分の頭では副問い合わせを使う方法か、ソートを使う方法しか思いつきません。 問題は副問い合わせ・ソートを使うと計算コストが大きくなってしまうことで、できることなら副問い合わせ・ソートを使わずに解決したいのですが、何か方法はないものでしょうか? よろしくお願い致します。 ----------------------------- software_table id name version 1 oracle 1 2 oracle 2 3 oracle 3 4 postgres 1 5 postgres 2 6 postgres 3 7 postgres 4 ----------------------------- ■副問い合わせを使った方法 SELECT id FROM software_table WHERE name = 'oracle' AND version = (SELECT max(version) FROM software_table WHERE name = 'oracle'); ■ソートを使った例 SELECT id FROM software_table WHERE name = 'oracle' ORDER BY version DESC LIMIT 1 OFFSET 0; -----------------------------

  • 【PHP】 sort() で大文字小文字を同一視できませんか?

    PHP5使用者です。 sort() でソートすると、並び順は A B C … a b c … となります。 そうではなく A a B b C c …  とか a A b B c C … にしたいのですがどうすればいいのでしょうか。 お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • GROUP BY使用時のソートについて

    OracleSqlにて「GROUP BY」使用した日付のデータを取得するSql文を作成したのですが、 「ORDER by」句に「DESC」を付けても降順ソートが行えません。 作成したSql文は以下の通りなのですがなぜ降順ソートが行えないのでしょうか? 「GROUP BY」を使用するとソート出来ないと言うことなのでしょうか? それとも日付型なのでソートが出来ないと言うことなのでしょうか? どなたかご存知の方おりましたらご教授下さい。 ------------------------------------------------- SELECT TO_CHAR(RECORDDATE,'YYYY/MM/DD') ,RECORDYEAR ,RECORDMONTH ,RECORDDAY FROM STOCKTBL WHERE TO_CHAR(RECORDDATE,'YYYY/MM/DD')<='2002/03/07' AND TO_CHAR(RECORDDATE,'YYYY/MM/DD')>='2002/02/22' GROUP BY TO_CHAR(RECORDDATE,'YYYY/MM/DD') ,RECORDYEAR ,RECORDMONTH ,RECORDDAY ORDER by TO_CHAR(RECORDDATE,'YYYY/MM/DD') ,RECORDYEAR ,RECORDMONTH ,RECORDDAY DESC -------------------------------------------------

  • DISTINCTで選択した項目以外でのソート

    お世話になります。 SQLサーバ2000から、SQLサーバ2008への移行を行っております。 以下のようなSQL文は2000では許容されていたようで、問題なく(?)稼働していただのですが2008に移行したら軒並みエラーになってしまいました。 エラーで稼働確認が進まないので、修正方法を検討しているのですが、まだSQLサーバが使えない環境で確認ができません。 2000が来てから確認する予定ではありますが、以下の通りで新旧・同様のソート順になると考えて問題ございませんでしょうか。 教えていただけると幸甚です。 【例1】 SELECT DISTINCT ISNULL(T1.C1,""),T1.C2 FROM T1 ORDER BY T1.C1 →ORDER BY 項目を ISNULL(T1.C1,"")に変更 【例2】 SELECT DISTINCT T1.C1,T1.C2 FROM T1 ORDER BY T1.C1,T1.C3 →ORDER BY 項目から T1.C3 を削除する 以上です。宜しくお願いいたします。

  • Order by句でバインド変数を使うには?

    SQL文のOrder by句で2つのバインド変数を用いて、ソートする項目・ソート順を決めたいと思い、以下のようなSQLを作成いたしました。 Select row_Number() Over(Order by Case :ITEM When 'PJコード' then PJコード When '部署コード' then 部署コード end Case :LINE When '1' then DESC When '2' then ASC end .... バインド変数を直接Order by句に入れますと、結果は帰ってくるのですが、バインド変数の値がすべて無視されてデータが出力されます。 以上の理由より、Case文にてバインド変数の値を参照し、ソートする項目と順番を決めております。 上記のソースで実行しますとORA-00907:右かっこがありませんというエラーが表示されます。 2つ目のCase文(:LINE)を消し、最初のCase文だけを残して、並び順(DESC・ASC)を埋め込むと、実行される状態になります。 Oracleのバージョンは11gです。 ご回答よろしくお願いいたします。