- - PR -
文字列とdateitme型との比較について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-02-19 17:53
はじめまして。
ご教示よろしくお願いします。 DBにdatetime型で 2005-01-01 00:00:00 という値が入っています。 これを 20000101000000 から 2100010100000 という文字列の範囲に含まれるかの セレクト文を書きたいのです。 select 抽出値 from DB名 where 抽出条件(ここがわかりません) ; 2005-01-01 00:00:00 を20050101000000 という文字列に変換できれば いいのですが、方法が思いつきません。 まず、DATE_FORMAT(2005-01-01 00:00:00,'%Y-%M-%D %T'))で文字列に直し、 そのあとどうすればよいのでしょうか? お知恵をお貸しください。 よろしくお願いします。 | ||||||||
|
投稿日時: 2005-02-19 18:34
普通に文字列をDATETIME型に変換してから比較。
DBにdetetime型で格納されているのを文字列に直して比較するということは、普通はやらない。もし行った場合、インデックスを使うことが出来ないので、著しくパフォーマンスが悪くなります。 ちなみに使っているDBが何かくらいは書いたほうが良いと思うけど・・・ | ||||||||
|
投稿日時: 2005-02-19 19:49
返答ありがとうございます。
DB名を書かずに失礼しました。 DBはMySQLです。 Java と連携しています。 Javaソース上でdatetime型に変換するという事なのでしょうか? Javaの文字列(String)をMySQLのDATETIME型に変換する方法は、 どのようにするのでしょうか? また、その際の比較方法は、 開始開始日付:20000101000000 終了日付 :2100010100000 の場合、 変換後開始日付 < DBの対象カラム < 変換後終了日付 でいいのでしょうか? 何度も申し訳ありませんが、よろしくおねがいします。 | ||||||||
|
投稿日時: 2005-02-19 22:25
マニュアルぐらい読め〜って感じ。
ちなみに私、JavaもMySQLも使ってませんよ。
それでも良し。 文字列を適当に分解して年〜秒を取得した後、Timestampに渡せばよいはず。 http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/sql/package-summary.html
MySQLのSQL関数で文字列を日時に変換しても良し。STR_TO_DATEで出来るはず。 http://dev.mysql.com/doc/mysql/ja/date-and-time-functions.html | ||||||||
|
投稿日時: 2005-02-21 10:09
返答ありがとうございます。
マニュアルを参照せず申し訳ありませんでした。 教えていただいたページのマニュアルで 以下の構文を書いたのですが、 "SELECT id,name,count(*) FROM テーブル名 WHERE STR_TO_DATE('" + this.fromDay + "." + this.fromMonth + "." + this.fromYear + " 00.00','%d.%m.%Y %H.%i') < " + 日付(datetime型) + " < STR_TO_DATE('" + this.toDay + "." + this.toMonth + "." + this.toYear + " 00.00','%d.%m.%Y %H.%i') " + " ORDER BY id"; エラーとして java.sql.SQLException: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('fromDay.fromMonth.fromYear 00.00','%d.%m.%Y %H.%i') < clickdate < STR_TO_DATE が発生します。 構文が間違っているのでしょうか? | ||||||||
|
投稿日時: 2005-02-21 11:52
はい、そうです。 | ||||||||
|
投稿日時: 2005-02-21 11:57
Exceptionのメッセージの通り構文(syntax)エラーです。 一度、@IT:SQL実践講座や本などを購入して基礎を学んだ方がよいのではないでしょうか。 | ||||||||
|
投稿日時: 2005-02-21 12:09
返答ありがとうございます。
ご指摘のとおり、ちゃんとSQLを勉強すべきなのですが、 その時間も無いほど現在の仕事の納期が迫っています。 もうしわけありませんでした。 |