• 締切済み

データベース呼び出しに使用するワイルドカードについて

javaの勉強を始めたばかりの初心者です。 少し場所をお借りさせていただきたいと思います。 1、データベース上に全社員の勤怠を記録したテーブルがあります。(キーは社 員IDとdate型の日付です) 2、ここで、ログイン時にセッション変数に格納した社員IDと指定専用ページ で指定された「年月」を使い、 この社員の1ヶ月分の出勤した日の出勤時刻~休入~休終~退勤時刻(全てtime 型です)を一覧表示したいのです。 ここで、2番で年と月しか指定していないので、 文字列の足し算を行ってもDB上はdate型で型があいません。 ですので年+月+*のようにワイルドカードを使用したいのです。 ResultSet rs=sttSql.executeQuery("SELECT * FROM kintai WHERE id='" + u_id<<社員id>> + "' AND like date='" + gdate<<年+月>> + *"'); のように指定しているのですが、文法エラーが出てしまいます。 単純ミスかも知れませんがそれがわからなくて困っています。。 ちなみに社員idの指定後のSQL文("'AND~~*"')を抜けばコマンドは通ります。 よろしければご教示いただければと思います。 どうかよろしくお願いします。 下記に前後のソースを記載します。 <%@---------%> <!--html文--> <% String gdate=(request.getParameter("year"))+(request.getParameter ("month")); String u_id=session.getAttribute("id").toString(); Context ctx=new InitialContext(); DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/kintai"); Connection db=ds.getConnection(); Statement sttSql=db.createStatement(); ResultSet rs=sttSql.executeQuery("SELECT * FROM kintai WHERE id='" + u_id + "' AND like date='" + gdate + "'); while(rs.next()){ String strDate=rs.getString("date"); String strTbegin1=rs.getString("t_begin"); String strTend1=rs.getString("t_end"); String strRbegin1=rs.getString("r_begin"); String strRend1=rs.getString("r_end"); String strDay=strDate.substring(8,10); String strTbegin2=strTbegin1.substring(0,5); String strTend2=strTend1.substring(0,5); String strRbegin2=strRbegin1.substring(0,5); String strRend2=strRend1.substring(0,5);%> <tr> <td><%=strDay %>日</td> <td><%=strTbegin2 %></td> <td><%=strTend2 %></td> <td><%=strRbegin2 %></td> <td><%=strRend2 %></td> </tr> <!--後始末(close)--> <!--html文-->

みんなの回答

  • sh_hirose
  • ベストアンサー率66% (56/84)
回答No.3

気になったことが・・・ ResultSet rs=sttSql.executeQuery("SELECT * FROM kintai WHERE id='" + u_id + "' AND like date='" + gdate + "'); AND like date='年 + 月'になってるけど AND date like '年 + 月 + *'じゃないの? あと '" + gdate + "');は '" + gdate + "'"); これか String gdate=(request.getParameter("year")) + (request.getParameter("month") + "*"); ResultSet rs=sttSql.executeQuery("SELECT * FROM kintai WHERE id='" + u_id + "' AND date like '" + gdate + "'"); または String gdate=(request.getParameter("year")) + (request.getParameter("month")); ResultSet rs=sttSql.executeQuery("SELECT * FROM kintai WHERE id='" + u_id + "' AND date like '" + gdate + "*'"); になるのでは? それとも単なるコピペミス? ワイルドカードを使いたいなら cast(date as varchar) like '200801*' でやれば検索できると思います。(上はPostgreSQL、Oracleならvarchar2)

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.2

Oracleならば TO_CHARなどにCASTすれば よいと思います http://oracle.se-free.com/dml/07_todate.html

参考URL:
http://oracle.se-free.com/dml/07_todate.html
回答No.1

やり方はいくつかあると思いますが。 1.date > 指定した年月の1日 and date < 翌月1日 2.DBの関数を使用してDate型を文字列と扱い LIKE '200808%' で検索する。 とかですかね。

関連するQ&A

専門家に質問してみよう