プロが教えるわが家の防犯対策術!

お世話になります。
winXP,MySQL5.0で開発を行っています。

テーブル名 usr_tbl
フィールド名 company

とした場合、companyの内容として、
「株式会社サンプル商事」
「(株)さんぷる」
など、株式会社、有限会社等がマチマチの方法で入力されています。

今回、companyでソートをかけて抽出したいのですが、
このとき、株式会社などの記号を省いた状態でソートしたいのです。
上の例だと
「サンプル商事」
「さんぷる」
としてソートしたいです。

このようなことが出来るのでしょうか?

全件抽出後に、独自でソートしたほうが速いのでしょうか?

よろしくお願いいたします。

A 回答 (3件)

select * from usr_tbl


・・・
order by replace(・・replace(company,'株式会社',''),'(株)','')・・・・

・・はreplace(
・・・・は,'有限会社など対象外にしたい文字列','')

有限会社株式会社 なんていう会社名があるとうまくうごきませんが、
まずないでしょう。

>全件抽出後に、独自でソートしたほうが速いのでしょうか?
全件抽出後に、独自でソートしたほうが早いかもしれません。
こちらは私はよくわかりません。
試してみてもらわないと。

replace関数の説明
http://oss.timedia.co.jp/show/MySQL%E6%97%A5%E6% …

## MYSQL使う環境がないので、
## 確認はしていません。
## また、MYSQLの方言は分かっていないので
## Order by でかけるのは、select句の中の項目だけとかなら、
## select句中に書いてas XXで名前をつけてそれでorder byしてください。
    • good
    • 0
この回答へのお礼

ありがとうございました。
replaceで対応することができました。
複数置換したい場合のreplaceの書き方が分からなかったので、
非常に助かりました。

お礼日時:2011/09/30 12:05

正しくソートするには、別途「読みフィールド」が必要ですね。



「清和コーポレート」を「セイワコーポレート」と読むか「シンワコーポレート」と読むか、漢字のみでは判らないので「セ」か「シ」のどちらで読むかの判断材料である「読みフィールド」が必要です。

この辺りをきちんとしないと、顧客から「清和コーポレートが『シ』の所に出てこないバグがあるので直して欲しい」と言われ、困った事になります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
確かに読み用のフィールドがないと正しくソートは出来ないと気づきました。
今回は社内だけで使っているものなので、そのあたりはどうにかなりそうですが、
次回からは社名や氏名でソートをする可能性があるときは
設計時に盛り込むように注意したいと思います。
助かりました、ありがとうございました。

お礼日時:2011/09/30 12:07

ソート用のフィールドをつくっておいて、


INSERT するときに不要な文字列を削除して登録しておくのがベター。

order by 句でreplace()関数を使うこともできますが
インデックスも効かないし効率はわるいとおもいます
    • good
    • 0
この回答へのお礼

ありがとうございます。
replaceだとインデックスも効果なくなるのですね。
今回は社内の小さなシステムであるということもあり、
インデックスは設定されていませんでしたが、次回以降注意して行きます。
助かりました、ありがとうございます。

お礼日時:2011/09/30 12:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す