@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

文字列とdateitme型との比較について

投稿者投稿内容
未記入
会議室デビュー日: 2004/09/08
投稿数: 8
投稿日時: 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'))で文字列に直し、
そのあとどうすればよいのでしょうか?

お知恵をお貸しください。
よろしくお願いします。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-02-19 18:34
普通に文字列をDATETIME型に変換してから比較。

DBにdetetime型で格納されているのを文字列に直して比較するということは、普通はやらない。もし行った場合、インデックスを使うことが出来ないので、著しくパフォーマンスが悪くなります。

ちなみに使っているDBが何かくらいは書いたほうが良いと思うけど・・・
未記入
会議室デビュー日: 2004/09/08
投稿数: 8
投稿日時: 2005-02-19 19:49
返答ありがとうございます。

DB名を書かずに失礼しました。
DBはMySQLです。
Java と連携しています。

Javaソース上でdatetime型に変換するという事なのでしょうか?
Javaの文字列(String)をMySQLのDATETIME型に変換する方法は、
どのようにするのでしょうか?

また、その際の比較方法は、
開始開始日付:20000101000000
終了日付  :2100010100000 
の場合、
変換後開始日付 < DBの対象カラム < 変換後終了日付
でいいのでしょうか?

何度も申し訳ありませんが、よろしくおねがいします。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-02-19 22:25
マニュアルぐらい読め〜って感じ。
ちなみに私、JavaもMySQLも使ってませんよ。
引用:

未記入さんの書き込み (2005-02-19 19:49) より:
Javaソース上でdatetime型に変換するという事なのでしょうか?


それでも良し。
文字列を適当に分解して年〜秒を取得した後、Timestampに渡せばよいはず。
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/sql/package-summary.html
引用:

Javaの文字列(String)をMySQLのDATETIME型に変換する方法は、
どのようにするのでしょうか?


MySQLのSQL関数で文字列を日時に変換しても良し。STR_TO_DATEで出来るはず。
http://dev.mysql.com/doc/mysql/ja/date-and-time-functions.html
未記入
会議室デビュー日: 2004/09/08
投稿数: 8
投稿日時: 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

が発生します。
構文が間違っているのでしょうか?
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-02-21 11:52
引用:

構文が間違っているのでしょうか?


はい、そうです。
えんぞ@?
ぬし
会議室デビュー日: 2004/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 2005-02-21 11:57
引用:

未記入さんの書き込み (2005-02-21 10:09) より:

エラーとして
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


Exceptionのメッセージの通り構文(syntax)エラーです。
一度、@IT:SQL実践講座や本などを購入して基礎を学んだ方がよいのではないでしょうか。
未記入
会議室デビュー日: 2004/09/08
投稿数: 8
投稿日時: 2005-02-21 12:09
返答ありがとうございます。

ご指摘のとおり、ちゃんとSQLを勉強すべきなのですが、
その時間も無いほど現在の仕事の納期が迫っています。
もうしわけありませんでした。

スキルアップ/キャリアアップ(JOB@IT)