- PR -

月順に表示

1
投稿者投稿内容
どんたくお
ベテラン
会議室デビュー日: 2005/08/29
投稿数: 88
投稿日時: 2005-12-29 01:50
みなさん、こんばんは。
どんたくおです。

すみません。SQL文のことで、1点でご教授いただきたいことがございます。
RDBMSはPostgreSQL 7.4を使用しております。

下のようなテーブルがあるとします。

create table hoge(
id integer,
title varchar(200)
);

下のようなデータがあるとします。
id | title
1 | 2002年1月発売
2 | 2002年2月発売
<..snip..>
11 | 2002年11月発売
12 | 2002年12月発売

これを、titleフィールど基準に年代と月順に表示させたいのです。
単純にorder by titleとすると
11 | 2002年11月発売
12 | 2002年12月発売
<..snip..>
1 | 2002年1月発売
2 | 2002年2月発売
と表示されてしまいます。

今回、idでのソートは登録順序が上下するためNGで純粋にtitleフィールドでの並び変えを行いたいのですが、
なんとかして
1 | 2002年1月発売
2 | 2002年2月発売
<..snip..>
11 | 2002年11月発売
12 | 2002年12月発売

と表示させる手立てとかありますでしょうか。

ご教授いただけるとありがたいです。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2005-12-29 03:18
date型に変更、

2002-01-01
2002-02-01
2002-11-01
2002-12-01

形式で insert.

order by で何とかなる筈。
漢字は、アプリケーション側の加工でどうとでもなる。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-29 08:18
こういうのは設計の段階で、考慮しておくべき点なんですが...
「2002年01月発売」とゼロパディングされていれば問題はないですね。

それ以前に Title は Title で Order かけるなら別のフィールドを用意すべきだと思いますけど。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2005-12-29 10:29
第1ソートキー 文字列の長さ
第2ソートキー 年と月発売を消去
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-12-29 11:00
こんにちは。

単純に、
「年」の存在する位置から4文字分引いた場所を特定し、
特定した場所から4文字を取得する。
#これで年部分がとれる。

「年」の存在する位置から1足した場所と、
「月」の存在する位置から1引いた場所の間に含まれる文字を取得する。
#これで月部分がとれる。

上記で取得したものを条件にソートする

っていうのはいかがでしょう?

PostgreSQLのマニュアルを見るとわかりますが
substringでPOSIX正規表現を使って文字を切り出すことも出来るので、
上記の例よりも、単純にいけそうな気がします。
#いま実験用PostgreSQLをアンインストしちゃったので
#試していませんが、参考になれば幸いです。
どんたくお
ベテラン
会議室デビュー日: 2005/08/29
投稿数: 88
投稿日時: 2005-12-30 00:34
みなさま、ご返信いただきまして、ありがとうとざいます。

コブラさん
> date型に変更
まさにそうしなければならないのですが、提示させていただいたテーブルはテスト用で、実際はフィールドをソート用の追加できないのが現状です。

じゃんぬねっとさん
> こういうのは設計の段階で、考慮しておくべき点なんですが
まさに、その通りです。
お恥ずかしい限りです。

明智重蔵さん
> 第1ソートキー 文字列の長さ
> 第2ソートキー 年と月発売を消去
教えていただいた方法を試してみました。
translateで、文字列を削り削り削りでorder byで指定したところ、望んだ通りの表示順で表示させることができました。
本当にありがとうございます。
自分では全く気がつかない方法でした。

夏椰(冒 険 者)さん
> substringでPOSIX正規表現を使って文字を切り出すことも出来るので
なるほど。正規表現が使用できるのですね。これは知りませんでした。
WHERE句で正規表現を指定したことはあったのですが、文字列の切り出しができるのですね・・・。

みなさまのおかげで、今回も問題を解決することができました。
本当にありがとうございました。m(_|_)m
1

スキルアップ/キャリアアップ(JOB@IT)