• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:型変換)

データベース日付のソート方法について

このQ&Aのポイント
  • データベースに保存されている日付情報がchar型である場合、日付順にソートする方法を知りたいです。
  • 単純にorder by day ascでソートすると、数字の大小関係によって正しくソートされません。
  • char型の日付情報をnumber型に変換して、それをソート条件として使用する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>このchar型の日付をnumber型にconvrtか何かしたものを >order byの条件にしたいです。 ここはMySQLのカテゴリですが、Oracleの質問ですか? MySQLには、number型は存在しませんけど? RDBMS名、バージョンを、明記してください。 それに、日付をchar(2)に格納するメリットを、あまり思いつかないのですが? MySQLならば、以下のようなSQLで可能と思います。 select * from tbl1 order by cast(c1 as signed);

japan_3
質問者

お礼

できました! 教えてもらったのですが、 ORDER BY day + 0 ASC でOKみたいです。 castの方法は結局分からないのですが、 charからintへの変換はでき、期待通りの出力が得られました。 intを文字列に直すとき + ""をするとできる(正規な方法ではないかもしれないですが) のと同じですね。 order by 句でも使えるのは勉強になりました。 >それに、日付をchar(2)に格納するメリットを、あまり思いつかないのですが?   そうですよね。   tinyintとかにしてくれと頼んだほうがいいでしょうか・・   幸い、このテーブルは自分しか使わないのですが、   他の、日付を使う画面ではやはりchar型になっているのだと思います。   本質的な方法ではないかもしれませんが、java側で対処することにします。   ご回答ありがとうございました。

japan_3
質問者

補足

ご回答ありがとうございます。 MySQLを使っています。 確かにnumber型はないですね・・ tinyintかintにします。 http://dev.mysql.com/doc/refman/4.1/ja/cast-functions.html のリファレンスを参考にしながら書いたのですが、どうもキャストが使えないようなのです。 sql文:SELECT year, month, day FROM Calendar WHERE year = ? month = ? ORDER BY cast ( day as signed ) ASC エラー文:Incorrect parameters in the call to stored function 'cast' com.mysql.jdbc.SQLError:createSQLException(936) com.mysql.jdbc.MysqlIO:checkErrorPacket(2985) com.mysql.jdbc.MysqlIO:sendCommand(1631) com.mysql.jdbc.MysqlIO:sqlQueryDirect(1723) com.mysql.jdbc.Connection:execSQL(3256) com.mysql.jdbc.PreparedStatement:executeInternal(1313) com.mysql.jdbc.PreparedStatement:executeQuery(1448) MySQLのバージョンはMySQL5.xですので、cast()は使えるはずなのですが・・・ (?にはsetString()してあります)

関連するQ&A