dポイントプレゼントキャンペーン実施中!

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文-->

A 回答 (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)
    • good
    • 0

Oracleならば TO_CHARなどにCASTすれば


よいと思います
http://oracle.se-free.com/dml/07_todate.html

参考URL:http://oracle.se-free.com/dml/07_todate.html
    • good
    • 0

やり方はいくつかあると思いますが。



1.date > 指定した年月の1日 and date < 翌月1日
2.DBの関数を使用してDate型を文字列と扱い LIKE '200808%' で検索する。

とかですかね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!