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

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

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

文字列に対しての order byについて


(過去ログ 5 を表示中)

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

■5037 / inTopicNo.1)  文字列に対しての order byについて
  
□投稿者/ abi 二等兵(6回)-(2006/07/20(Thu) 10:12:11)

分類:[データベース] 


分類:[データベース] 

今回もできましたらご教授願います。

SQLでTEXT型の数字を       
例(1)
(2)
(3)
. 
.
.
(10)
とソートしたいのですがどのようにすれば実現できるでしょうか?
現在
(1)
(10)
(2)
(3)
.
.
.
.
(9)
使っているDBはpostgreSQL8.1です。

ちゃんと説明できているか不安でしょうがないですが(^^;;)



0
引用返信 編集キー/
■5039 / inTopicNo.2)  Re[1]: 文字列に対しての order byについて
□投稿者/ KEI 二等兵(3回)-(2006/07/20(Thu) 11:10:00)

分類:[データベース] 

No5037に返信(abiさんの記事)
初めましてKEIです。
DBでも何でもたぶん同じだと思いますが、文字列の数字を昇順、降順で
正確に並べたい場合、ゼロ詰めを行わなくてはなりません。
(例)
1 2 3 4 → 0001 0002 0003 0004
自分はこの方法しか知りません…他に方法はあるんでしょうか…。
特定の記号をつけたりですかね…

0
引用返信 編集キー/
■5043 / inTopicNo.3)  Re[2]: 文字列に対しての order byについて
□投稿者/ しばえび 二等兵(8回)-(2006/07/20(Thu) 12:31:09)

分類:[データベース] 

文字列だからうまくいかない、というのなら、ソートキーを数値型に変換すればいいのでは?
「SQL 文字列から数値へ変換」とかで検索すれば、何かしらの変換関数が見付かると思います。
ANSI標準の関数なら、postgreでも使用可能のはず。
探してみてください。

※但し、変換関数を使う場合、ソートキーに数字以外の文字が入っているとエラーになります。

0
引用返信 編集キー/
■5047 / inTopicNo.4)  Re[3]: 文字列に対しての order byについて
□投稿者/ abi 二等兵(7回)-(2006/07/20(Thu) 14:21:32)

分類:[データベース] 

KEI様、しばえび様
返信ありがとうございます。

ソートのデータは数字だけでなく
実質何が入るのかわからない状態なのです
(これが英数字のみとか、英数字も混ざってなどとしっかりと仕様が決まってればいいのですが・・・・決めてくれない発注者がにくい (=_=)   )、
数値にキャストしてというのはできないのです・・・・
やはり、頭に適切な何か(0や空白)を入れないとだけでしょうか・・・・

0
引用返信 編集キー/
■5049 / inTopicNo.5)  Re[4]: 文字列に対しての order byについて
□投稿者/ KEI 二等兵(4回)-(2006/07/20(Thu) 14:32:43)

分類:[データベース] 

No5047に返信(abiさんの記事)
> ソートのデータは数字だけでなく
> 実質何が入るのかわからない状態なのです
> (これが英数字のみとか、英数字も混ざってなどとしっかりと仕様が決まってればいいのですが・・・・決めてくれない発注者がにくい (=_=)   )、
> 数値にキャストしてというのはできないのです・・・・
> やはり、頭に適切な何か(0や空白)を入れないとだけでしょうか・・・・

決まった文字数に揃えれば比較的にアルファベット順、ひらがな順、数字順に
ソートする事が出来ると思います。
SQLでソート出来ない場合、自分は取得した後に形式を整えてからソート
したりしますね。(^^)

0
引用返信 編集キー/
■5053 / inTopicNo.6)  Re[5]: 文字列に対しての order byについて
□投稿者/ しばえび 二等兵(9回)-(2006/07/20(Thu) 15:23:59)

分類:[データベース] 

No5047に返信(abiさんの記事)
> ソートのデータは数字だけでなく
> 実質何が入るのかわからない状態なのです

レス書きながら、数字以外が入ってくるのかもしれない、と思ってたんですが案の定でした。(^^;
だったら、0埋めにする方が確実ですね。
lpadで何とかならないかな。

select *
from TestTable
order by lpad(SORTKEY, 5, '0')

みたいな感じで。
0の個数はソート項目の桁数一杯にすれば、綺麗にソートできると思います。
lpadが駄目でも、何かしらの「文字を埋める関数」が見付かれば、元データはいじらなくて済むかと。

#手元にpostgreないので、未検証です。


0
引用返信 編集キー/
■5054 / inTopicNo.7)  Re[6]: 文字列に対しての order byについて
□投稿者/ ぽぴ王子 一等兵(31回)-(2006/07/20(Thu) 16:01:24)
ぽぴ王子 さんの Web サイト

分類:[データベース] 

こんにちは。

最初の投稿が

> SQLでTEXT型の『数字』を

ということだったので、括弧の中の数字だけを取り出してなんとかすれば…など
と考えていましたが(これはしばえびさんと同じ意見ですね)次の投稿で出てき
た内容が

> ソートのデータは『数字だけでなく
> 実質何が入るのかわからない』状態なのです

だったので、そうなると

  ムリ。

と言うしかないのかなと思います。

KEIさんのパディング案は正直「その発想はなかったわ。おまえあったまいーな
ー」という感じだったのですが(VIP風に)数字以外のものが入ってくる時点で
「正しいソート」が行えなくなるのは同じかもしれませんね。

例として

(1)
(あ)
(Z)
(10)
(Σ)
(ぁ3)
(7)

のようなデータがあったとき、これをどうやってソートすればいいのかはパディ
ングしようとどうしようと誰にもわからないのではないでしょうか。一応文字コ
ード順とかそういった案はあるかもしれませんが、それも突然ウムラウトが入れ
られたらどうやってソートすんねんとか、いろいろ考え出すと結局答えは

  そんなのムリ!by高橋由美子

なのかなあと。

私が採る案とすれば、別途ソートに使用するための数値項目をテーブルに追加す
るとか(今さらそれも難しそうだけど)。
比較的現実的?な案としては(それでもかなりアレですが)顧客に入力文字を決
めてもらうか、もしくは「あきらめろ、な!」と出来ないと宣言してしまうぐら
いでしょうか。

プログラマは魔法使いではないので、実現可能な範囲と言うのは絞られてくると
思います。そこを無理やりなんとかしようとするといろいろと破綻することもあ
るので、仕様から見直すのも「アリ」だと思いますが、どうでしょうか。

0
引用返信 編集キー/
■5056 / inTopicNo.8)  Re[7]: 文字列に対しての order byについて
□投稿者/ trapemiya 軍曹(77回)-(2006/07/20(Thu) 17:17:14)
trapemiya さんの Web サイト

分類:[データベース] 

ぽぴ王子さんが言われるように、現時点での情報から考えて、仕様を見直すのが一番のように想像します。

しかし、どうしてもということであれば、次のような方法でできるかもしれません。

数値と文字が混じっているわけですから、これらを一緒にソートしたいというのであれば、文字型としてソートしなければなりません。であれば、しばえびさんが言われているように、頭を0埋めにするようなパディングをしなければなりません。レコード毎に文字や数字が混ざっているわけですから、そのフィールドの値をストアドファンクションを通すようにし、数字だけから成っていれば、頭を0埋めして返し、そうでなければそのまま返すようにして、その戻り値でソートをすればできるかもしれません。

未経験&未検証ですし、postgreSQL8.1でストアドファンクションが使えるのか?また、そこで上記のロジックが組めるのかどうかもわかりませんが。(^^;

0
引用返信 編集キー/
■5058 / inTopicNo.9)  Re[8]: 文字列に対しての order byについて
□投稿者/ Kazu 二等兵(1回)-(2006/07/20(Thu) 19:34:40)

分類:[データベース] 

No5056に返信(trapemiyaさんの記事)

 私はプロではありませんが
ぽぴ王子さんが言われるように、別途ソートに使用するための数値項目をテーブルに追加する(数値以外が入るなら 数値項目でなくても0詰めにした文字列項目をソート用に追加する)が一番簡単だと思います。


0
引用返信 編集キー/
■5061 / inTopicNo.10)  Re[9]: 文字列に対しての order byについて
□投稿者/ 夏椰 二等兵(19回)-(2006/07/21(Fri) 00:47:23)
夏椰 さんの Web サイト

分類:[データベース] 

こんばんは。

単純にvarchar列に0パディングなしで、
1
2
3
10
と入っていた場合、私なら以下のSQLを発行します。

SELECT * FROM テーブル ORDER BY LENGTH(列名),列名 ;

ただ、話が途中から変わってきて、文字とか入るということで
次のようなデータの場合、
1
2
3
10
a
aa
上記にあげたSQLですと 以下のような並びになります。
1
2
3
a
10
aa

これが仕様を満たすかどうかは わかりません。

仕様を決めてくれないのであれば、逆に提案してはいかがですか?
プログラムができる範囲の動作を。

0
引用返信 編集キー/
■5065 / inTopicNo.11)  Re[10]: 文字列に対しての order byについて
□投稿者/ YAS 軍曹(60回)-(2006/07/21(Fri) 12:22:35)
YAS さんの Web サイト

分類:[データベース] 

最終的に,”ある決まった文字列”の集合が使われることになるなら,その文字列とソートする順番の数字の組み合わせのテーブルを一つ作って,その数字をキーにソートすればよいのでは?

0
引用返信 編集キー/
■5100 / inTopicNo.12)  Re[11]: 文字列に対しての order byについて
□投稿者/ abi 二等兵(9回)-(2006/07/25(Tue) 11:39:27)

分類:[データベース] 

返信いただきました皆様 ありがとうございます。

格納するデータの頭に1字付けるように提案をしなおかつ
必ず9桁のコードにするように提案して了承されましたので
何とかできるようになりました

お騒がせしてすみませんでした

m(_ _)m


解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -