質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

Q&A

解決済

1回答

17136閲覧

【Spring MyBatis】MyBatisにおける動的SQLで文字列型⇒日付型に変換した上での検索ができない

S.niranira

総合スコア19

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

0グッド

0クリップ

投稿2018/04/23 04:29

編集2018/04/23 04:32

前提・実現したいこと

いつもお世話になっております。
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 }

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

javaは詳しくありませんが、STR_TO_DATE()のパラメータの編集がおかしくないですか?

java

1WHERE("K1.kokyaku_insdate >= str_to_date(('%',#{startDate},'%'), '%Y/%M/%d')"); 23WHERE("K1.kokyaku_insdate >= str_to_date(#{startDate}, '%Y/%m/%d')"); 4

※endDateも同じ
多分、like条件をコピペしたときのミスでは?

投稿2018/04/23 05:01

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

S.niranira

2018/04/23 05:08

ご指摘ありがとうございます。 「('%',#{startDate},'%')」についてすっかり失念しておりました…。 LIKE句のワイルドカードの部分が丸々入ったままでした。 「#{startDate}」に修正したところ無事検索ができました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問