簡単な問題だと思いますが、教えてください。
データベースに日付が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で質問しましょう!
似たような質問が見つかりました
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- C言語・C++・C# C言語について コマンドラインで >変数 12.00 (char型) と、小数点付きの値を共用体に渡 1 2022/04/22 16:56
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- システム 帳票出力を行う単体テストのテストデータが作成できません 2 2023/08/26 21:26
- IT・エンジニアリング 帳票出力を行う単体テストのテストデータが作成できません 2 2023/08/26 21:25
- 車検・修理・メンテナンス 自動車車検は、自分で、ユーザー車検で、車検場に持ち込みすると、法定費用だけで、簡単に受かるよ。 7 2023/02/05 22:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<SQL>重複しているデータの場合...
-
SQL 重複しないJoinの仕方を教...
-
日付検索で0001-01-01 00:00:00...
-
DISTINCTROWについてです。
-
複数のテーブルから値を合計出...
-
mysqlでunixtimeによる日付範囲...
-
select文の実行結果に空白行を...
-
SQLローダーCSV取込で、囲み文...
-
レコードの登録順がおかしい
-
これをSQL文で出来るでしょうか?
-
Oracleで「文字が無効です」の...
-
テーブルの最後(最新)のレコー...
-
count関数の値をwhere句で使用...
-
AccessのSQL文で1件のみヒット...
-
ファイルの漢数字の順番につい...
-
SELECTした合計値をそのまま割...
-
【PL/SQL】FROM区に変数を使う方法
-
アクセスのレポートでレコード...
-
where句中のtrim関数について
-
【SQLサーバ】float型における...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<SQL>重複しているデータの場合...
-
複数のテーブルから値を合計出...
-
SQL 重複しないJoinの仕方を教...
-
MySQLで特定のグループの上位3...
-
直近1ヶ月に誕生日を迎える社員...
-
最新の日付と2番目の日付のデー...
-
SQLで、同じ値が何回連続す...
-
DISTINCTROWについてです。
-
mysqlでunixtimeによる日付範囲...
-
MySQL「 INT」「 DATETIME」違い
-
mysqlに格納されている日付のデ...
-
NULLは表示順最下位
-
【意見募集】文字列カラムに対...
-
mysqlのif文かcase文で複数条件...
-
MySQLのtimestamp型について
-
mysqlでクロス集計を取りたいが...
-
Mysqlで最新の日付を持つデータ...
-
日付や日時を格納する場合の型...
-
型変換
-
SQL文を教えてください。
おすすめ情報