- - PR -
月順に表示
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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月発売 と表示させる手立てとかありますでしょうか。 ご教授いただけるとありがたいです。 |
|
投稿日時: 2005-12-29 03:18
date型に変更、
2002-01-01 2002-02-01 2002-11-01 2002-12-01 形式で insert. order by で何とかなる筈。 漢字は、アプリケーション側の加工でどうとでもなる。 |
|
投稿日時: 2005-12-29 08:18
こういうのは設計の段階で、考慮しておくべき点なんですが...
「2002年01月発売」とゼロパディングされていれば問題はないですね。 それ以前に Title は Title で Order かけるなら別のフィールドを用意すべきだと思いますけど。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
|
投稿日時: 2005-12-29 10:29
第1ソートキー 文字列の長さ
第2ソートキー 年と月発売を消去 |
|
投稿日時: 2005-12-29 11:00
こんにちは。
単純に、 「年」の存在する位置から4文字分引いた場所を特定し、 特定した場所から4文字を取得する。 #これで年部分がとれる。 「年」の存在する位置から1足した場所と、 「月」の存在する位置から1引いた場所の間に含まれる文字を取得する。 #これで月部分がとれる。 上記で取得したものを条件にソートする っていうのはいかがでしょう? PostgreSQLのマニュアルを見るとわかりますが substringでPOSIX正規表現を使って文字を切り出すことも出来るので、 上記の例よりも、単純にいけそうな気がします。 #いま実験用PostgreSQLをアンインストしちゃったので #試していませんが、参考になれば幸いです。 |
|
投稿日時: 2005-12-30 00:34
みなさま、ご返信いただきまして、ありがとうとざいます。
コブラさん > date型に変更 まさにそうしなければならないのですが、提示させていただいたテーブルはテスト用で、実際はフィールドをソート用の追加できないのが現状です。 じゃんぬねっとさん > こういうのは設計の段階で、考慮しておくべき点なんですが まさに、その通りです。 お恥ずかしい限りです。 明智重蔵さん > 第1ソートキー 文字列の長さ > 第2ソートキー 年と月発売を消去 教えていただいた方法を試してみました。 translateで、文字列を削り削り削りでorder byで指定したところ、望んだ通りの表示順で表示させることができました。 本当にありがとうございます。 自分では全く気がつかない方法でした。 夏椰(冒 険 者)さん > substringでPOSIX正規表現を使って文字を切り出すことも出来るので なるほど。正規表現が使用できるのですね。これは知りませんでした。 WHERE句で正規表現を指定したことはあったのですが、文字列の切り出しができるのですね・・・。 みなさまのおかげで、今回も問題を解決することができました。 本当にありがとうございました。m(_|_)m |
1