C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: ソートについて


(過去ログ 120 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■70473 / inTopicNo.1)  ソートについて
  
□投稿者/ MMC (2回)-(2014/03/31(Mon) 09:44:38)

分類:[データベース全般] 


Field
001A
0010
001B
002A
002B
0020

上記のようなデータを下記の様にソートしたい

Field
0010
001A
001B
0020
002A
002B

SELECT * FROM TABLE ORDER BY Field
しても、

Field
001A
001B
0010
002A
002B
0020

SELECT * FROM TABLE ORDER BY
CASE
WHEN SUBSTR(Field ,4) BETWEEN '0' AND '9' THEN 1
WHEN SUBSTR(Field ,4) BETWEEN 'A' AND 'Z' THEN 2
ELSE 0
END
すると、

Field
0010
0020
001A
001B
002A
002B

になり、ソートできません
SQLに詳しい方よろしくお願いします。

 

引用返信 編集キー/
■70475 / inTopicNo.2)  Re[1]: ソートについて
□投稿者/ shu (516回)-(2014/03/31(Mon) 10:16:38)
No70473 (MMC さん) に返信

1文字目から3文字目はOrder Byで並び替えられるなら
1〜3桁と4桁を分離します。これを仮にORD1,ORD2とします。
ORD1はそのままソート
ORD2は提示されたような考え方で希望のソート順に変換(仮にORD3とします)
とすれば
Order By ORD1, ORD3
でソートできるかと思います。

引用返信 編集キー/
■70477 / inTopicNo.3)  Re[1]: ソートについて
□投稿者/ a (20回)-(2014/03/31(Mon) 10:20:08)
2014/03/31(Mon) 10:28:36 編集(投稿者)

No70473 (MMC さん) に返信
> 上記のようなデータを下記の様にソートしたい
>
> Field
> 0010
> 001A
> 001B
> 0020
> 002A
> 002B
>
SELECT * FROM TABLE ORDER BY Field asc

SQL Server 2012 なら上記構文で理想とするデータを取得できます。
質問主が使用しているDBは何ですか?

# 追記(2014/3/31 10:28)
1桁目にも数字とかアルファベットが来ることもあるのでしょうか。(例だと4桁目のみ数値、アルファベット混在。)
データを取得した後にプログラム側でソートすることはできますか。
それともSQLでソートできていないとまずいのかな?
引用返信 編集キー/
■70478 / inTopicNo.4)  Re[1]: ソートについて
□投稿者/ WebSurfer (203回)-(2014/03/31(Mon) 10:29:34)
No70473 (MMC さん) に返信

細かい質問をする前に、データーベースは何かとか、フィールドの型は何かとか、照合順序は
どうなっているか等を書いた方がいいのではないですか?
引用返信 編集キー/
■70483 / inTopicNo.5)  Re[1]: ソートについて
□投稿者/ ぶなっぷ (3回)-(2014/03/31(Mon) 11:01:07)
つうか、Fieldの値ってどう見ても16進数だよね。
数値データを文字列データとしてテーブルに保存してる辺りがすでに間違い。

とにかく、まずは数字に変えよう。
既存データがあるなら、コンバーターを作って変換しよう。

数値データを文字列データとしてテーブルに保存なんて、
少なくとも私が上司なら却下。
引用返信 編集キー/
■70485 / inTopicNo.6)  Re[2]: ソートについて
□投稿者/ ぶなっぷ (4回)-(2014/03/31(Mon) 11:08:03)
なお、

数値データにした上で、コード上で
string.Format("{0:X4}", 0x00A1) // C#の場合
とかすれば、元通りの文字列になる。

No70483 (ぶなっぷ さん) に返信
> つうか、Fieldの値ってどう見ても16進数だよね。
> 数値データを文字列データとしてテーブルに保存してる辺りがすでに間違い。
>
> とにかく、まずは数字に変えよう。
> 既存データがあるなら、コンバーターを作って変換しよう。
>
> 数値データを文字列データとしてテーブルに保存なんて、
> 少なくとも私が上司なら却下。
引用返信 編集キー/
■70486 / inTopicNo.7)  Re[2]: ソートについて
□投稿者/ shu (518回)-(2014/03/31(Mon) 11:15:35)
No70483 (ぶなっぷ さん) に返信
> つうか、Fieldの値ってどう見ても16進数だよね。
> 数値データを文字列データとしてテーブルに保存してる辺りがすでに間違い。
>
これは何ともいえない、提示コードが仕様にあったものなら
A〜Zという条件は16進数ということにはならない。
また型番のような情報なら文字列で保存するのも普通
引用返信 編集キー/
■70490 / inTopicNo.8)  Re[3]: ソートについて
□投稿者/ ぶなっぷ (5回)-(2014/03/31(Mon) 12:08:09)
言いたいことは分からんでもないけど、
言葉尻をとっての揚げ足取りにしか聞こえない。

> また型番のような情報なら文字列で保存するのも普通
というところまで考えが及んでいるのであれば、
型番情報ならアルファベット順ソートが普通であり、16進数であるかの
ようなソート方法は却下ではないのでしょうか?

結論として、
第一に質問者の情報が足らない。
Fieldは何のデータを表すのか?

仮に、Fieldが16進数なら文字として保存は却下
仮に、Fieldが型番として16進数っぽくソートは却下

ということです。

引用返信 編集キー/
■70491 / inTopicNo.9)  Re[4]: ソートについて
□投稿者/ shu (519回)-(2014/03/31(Mon) 12:46:28)
No70490 (ぶなっぷ さん) に返信

>>また型番のような情報なら文字列で保存するのも普通
> というところまで考えが及んでいるのであれば、
> 型番情報ならアルファベット順ソートが普通であり、16進数であるかの
> ようなソート方法は却下ではないのでしょうか?
別にそういう仕様にしたいのならそれはそれで実装すればよいことであって
他人が却下することではないかと思います。MMC さんが関わっているシステムでは
その並び替えによって業務効率がよくなるのかもしれません。
アドバイスなら問題ないと思います。


>
> 結論として、
> 第一に質問者の情報が足らない。
> Fieldは何のデータを表すのか?
これは全くそのとおりだと思います。ここがはっきりすれば
ぶなっぷ さんの言う『却下』が実際どうなのか明確になると思います。
また内容によっては私が先に回答した並び替えでも足りないかもしれません。



他、No70490について
同様にアドバイスならよいと思いますが他人が却下するようなものでは
ないかと思います。実はもうデータがかなり入っていて今回仕様追加などで
ソートを行おうと思ったら発生した問題とかだったら却下とか言われても
いまさらデータ構造変更するわけにはいかないとかも考えられるかと思います。


引用返信 編集キー/
■70492 / inTopicNo.10)  Re[5]: ソートについて
□投稿者/ ぶなっぷ (6回)-(2014/03/31(Mon) 13:21:08)
たぶん、shuさんが言いたいのは、
> 他人が却下することではないかと思います。
に尽きるのでしょう。

しかし、私自身、高圧的であっても決して押しつけはしていません。

「少なくとも私が上司なら却下」としか言っていません。
仕様を満たせば良いというだけの状況下なら却下する理由はありません。

なお、以下に関してはすでに回答済み。
> いまさらデータ構造変更するわけにはいかないとかも考えられるかと
> 思います。

ソフトウェアのバージョンアップで下位互換性がなくなることなど
日常茶飯事。
> 既存データがあるなら、コンバーターを作って変換しよう。
ということです。

なお、
質問者を置き去りにして話が進んでいますので、この件に関する私の
回答はこれで打ち切りとします。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -