
簡単な問題だと思いますが、教えてください。
データベースに日付がchar(2)型で入ってます。
この日付に従いソートしてListに入れたいと思ったのですが、
単純にorder by day asc だと
1→10→11→12→(・・・)→19→2→20→21→22→(・・・)→29→3→30→31
となり、日付順になりません。
もちろん
1→2→3→(・・・)→9→10→11→・・・
としたいです。
java側で処理してもいいと思ったのですが、
DBを交換するリスクもなさそうなので
どうにかSQLの側でやりたいです。
このchar型の日付をnumber型にconvrtか何かしたものを
order byの条件にしたいです。
答えを教えていただければありがたいですが、
こんな風に検索したら自分で分かるでしょと言うアドバイスだと
もっといいです。
すみませんが力を貸してください。
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);
この回答への補足
ご回答ありがとうございます。
MySQLを使っています。
確かにnumber型はないですね・・
tinyintかintにします。
http://dev.mysql.com/doc/refman/4.1/ja/cast-func …
のリファレンスを参考にしながら書いたのですが、どうもキャストが使えないようなのです。
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()してあります)
できました!
教えてもらったのですが、
ORDER BY day + 0 ASC
でOKみたいです。
castの方法は結局分からないのですが、
charからintへの変換はでき、期待通りの出力が得られました。
intを文字列に直すとき + ""をするとできる(正規な方法ではないかもしれないですが)
のと同じですね。
order by 句でも使えるのは勉強になりました。
>それに、日付をchar(2)に格納するメリットを、あまり思いつかないのですが?
そうですよね。
tinyintとかにしてくれと頼んだほうがいいでしょうか・・
幸い、このテーブルは自分しか使わないのですが、
他の、日付を使う画面ではやはりchar型になっているのだと思います。
本質的な方法ではないかもしれませんが、java側で対処することにします。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】入力された日付か...
-
SQLで、同じ値が何回連続す...
-
LIKE検索で範囲指定の方法
-
SQLローダーCSV取込で、囲み文...
-
単一グループのグループ関数で...
-
Oracleで「文字が無効です」の...
-
テーブルの最後(最新)のレコー...
-
引数によってwhere句を切り替え...
-
AccessのSQL文で1件のみヒット...
-
SQL*Loader Append
-
1の行を固定した上でVBAを用い...
-
タイムスタンプ型を抽出条件に...
-
SELECT FOR UPDATE で該当レコ...
-
アクセスのレポートでレコード...
-
コンボボックスのソートについて
-
select文の実行結果に空白行を...
-
トランザクションログを出力せ...
-
1レコード全てを改行なしで表...
-
BLOBやCLOBのパフォーマンスを...
-
ファイルの漢数字の順番につい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<SQL>重複しているデータの場合...
-
複数のテーブルから値を合計出...
-
最新の日付と2番目の日付のデー...
-
【ExcelVBA】入力された日付か...
-
LIKE検索で範囲指定の方法
-
項目以外の文字列は連結できま...
-
日付
-
Mysqlについて、どの程度の処理...
-
SQLで、同じ値が何回連続す...
-
検索を繰り返す?
-
日付
-
mysqlでunixtimeによる日付範囲...
-
MySQLにおける条件/公開日を指...
-
PHPとMYSQLを使用したデータベ...
-
日付検索で0001-01-01 00:00:00...
-
windows7のmysqlで今日の日付か...
-
型変換
-
効率の良いSQL文の書き方を教え...
-
SQLです教えてくださいお願いし...
-
日付や日時を格納する場合の型...
おすすめ情報