前提・実現したいこと
いつもお世話になっております。
MapperファイルにSQLを記述し、画面から文字列「YYYY/MM/DD」形式で値を取得し、
SQLのWHERE句に範囲検索条件として指定したいのですが、どうもうまくいきません。
また、エラーメッセージを読んでもイマイチ原因が特定できないため、
ご指摘をお願いできればと思います。
発生している問題・エラーメッセージ
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: java.sql.SQLException: Operand should contain 1 column(s) ### The error may exist in jp/sample/billing/mapper/KokyakutblMapper.java (best guess) ### The error may involve jp.sample.billing.mapper.KokyakutblMapper.selectListByInput-Inline ### The error occurred while setting parameters ### SQL: SELECT K1.no AS no, K1.kokyaku_code AS kokyakuCode, K1.kokyaku_name AS kokyakuName, K1.kokyaku_address AS kokyakuAddress, K2.keiyaku_name AS keiyakuName, K2.keiyaku_price AS keiyakuPrice, W1.campaign_name AS campaignName, W1.campaign_price AS campaignPrice FROM Kokyakutbl K1, Keiyakutbl K2, Waribikitbl W1 WHERE (K1.kokyaku_code = K2.kokyaku_code AND K1.kokyaku_code = W1.kokyaku_code AND K1.kokyaku_insdate >= str_to_date(('%',?,'%'), '%Y/%M/%d') AND K1.kokyaku_insdate <= str_to_date(('%',?,'%'), '%Y/%M/%d')) ### Cause: java.sql.SQLException: Operand should contain 1 column(s) ; bad SQL grammar []; nested exception is java.sql.SQLException: Operand should contain 1 column(s) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) javax.servlet.http.HttpServlet.service(HttpServlet.java:661) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) javax.servlet.http.HttpServlet.service(HttpServlet.java:742) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
該当のソースコード
Mapper.java(該当部分抜粋)
java
1 @SelectProvider(type = SqlProvider.class, method = "selectListByInput") 2 List<Kokyakutbl> selectListByInput(@Param("kokyakuName") String kokyakuName 3 , @Param("keiyakuName") String keiyakuName 4 , @Param("startDate") String startDate 5 , @Param("endDate") String endDate 6 ); 7 8 static class SqlProvider extends SQL{ 9 public String selectListByInput (@Param("kokyakuName") String kokyakuName 10 , @Param("keiyakuName") String keiyakuName 11 , @Param("startDate") String startDate 12 , @Param("endDate") String endDate 13 ){ 14 SELECT("K1.no AS no," 15 + " K1.kokyaku_code AS kokyakuCode," 16 + " K1.kokyaku_name AS kokyakuName," 17 + " K1.kokyaku_address AS kokyakuAddress," 18 + " K2.keiyaku_name AS keiyakuName," 19 + " K2.keiyaku_price AS keiyakuPrice," 20 + " W1.campaign_name AS campaignName," 21 + " W1.campaign_price AS campaignPrice"); 22 FROM("Kokyakutbl K1," 23 + " Keiyakutbl K2," 24 + " Waribikitbl W1"); 25 WHERE("K1.kokyaku_code = K2.kokyaku_code"); 26 WHERE("K1.kokyaku_code = W1.kokyaku_code"); 27 if(!StringUtils.isEmpty(kokyakuName)){ 28 WHERE("K1.kokyaku_name like CONCAT('%',#{kokyakuName},'%')"); 29 } 30 if(!StringUtils.isEmpty(keiyakuName)){ 31 WHERE("K2.keiyaku_name like CONCAT('%',#{keiyakuName},'%')"); 32 } 33 if(!StringUtils.isEmpty(startDate)){ 34 WHERE("K1.kokyaku_insdate >= str_to_date(('%',#{startDate},'%'), '%Y/%M/%d')"); 35 } 36 if(!StringUtils.isEmpty(endDate)){ 37 WHERE("K1.kokyaku_insdate <= str_to_date(('%',#{endDate},'%'), '%Y/%M/%d')"); 38 } 39 40 String sb = toString(); 41 return sb; 42 }
よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/23 05:08