like文の書き方を教えてください。

このQ&Aのポイント
  • テキストボックスを作成して入力した値がデータベースに格納されている場合表示されるSQL文を書いていますが、syntaxエラーになってしまい原因がわかりません。
  • 質問者は入力された名前を取得し、その名前を含むデータをデータベースから検索して表示するSQL文を書いています。
  • しかし、SQL文の構文に何らかのエラーがあり、正しく実行できません。コマンドプロンプト上では正しく表示されるため、原因を特定するのに困っています。
回答を見る
  • ベストアンサー

like文の書き方を教えてください。

テキストボックスを作成して入力した値がデータベースに 格納されている場合表示されるSQL文を書いていますが syntaxエラーになってしまい原因がわかりません。 String name = request.getParameter("name"); //入力された名前 String sql = new String(); <%-- SQL文 --%> sql += " select * from data "; sql += " where name "; sql += " like" + "('%" + s_name + "%')"; sql += " ) "; <input type="text" name="name" value=""> //textBox エラー表示 8番目: SQL = select * from data where name like('%i%') ) 9番目: ResultSetに格納失敗 : 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 ')' at line 1  となってしまいます。 コマンドプロンプト上で select * from data where name like('%itou%'); この場合はちゃんと表示されます。 お分かりになる方よろしくお願い致します。

  • MySQL
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.1

> sql += " ) "; この行は必要ですか? エラー表示の > 8番目: SQL = select * from data where name like('%i%') ) の末尾部分と、コマンドプロンプト上でうまくいっている > select * from data where name like('%itou%'); とを比べてみてください。

NeilMania
質問者

お礼

お返事ありがとうございます。 sql += ")"; は必要ないですね…。けし忘れていました…。 ゆっくり見ればわかるエラーでした…。初めてのlike文に ちょととまどっちゃいました…。

関連するQ&A

  • likeの使い方

    mySQLの4.1を使っています。 nameカラムに"水辺の蜘蛛"というデータが1件入っています。 select * from myTable where name like "%の蜘蛛%" or name_eng like "%の蜘蛛%" では1件とれるのですが、 select * from myTable where name like "%蜘蛛%" or name_eng like "%蜘蛛%" では0件になります。 何故でしょうか。

    • ベストアンサー
    • MySQL
  • PHPからのLIKE検索ができません。

    こんばんわ。お世話になります。 PHPからSQLを発行してLIKE検索をしようとしているのですがうまくいきません。(Xampp MySQL) $keyword = htmlspecialchars($_POST['keyword']); mysql_real_escape_string($keyword); $sql = "select * from master where name like '%{$keyword}%'"; テーブル内の name にマッチするはずの言葉があるのにマッチしません。 ちなみに echo $sql; とSQL文を表示させてPhpMyAdminでそれを実行すると、目的の検索結果が表示されます。 いろいろ検索してみたところ、LikeをLike Binary にする方法などがありましたが、どうにもうまくいきませんでした。文字コードはフォーム側、PHP・SQLともにUTF-8です。 '%{$keyword}%'あたりの書き方が悪いのでしょうか。 お手数おかけいたしますがアドバイスの程お願いいたします。

    • ベストアンサー
    • MySQL
  • LIKEで検索

    MySQL 4.0.20 + PHP で名前が入ったテーブルよりLIKEを使って検索すると全然関係のない名前まで引っ張ってきます。 SELECT * FROM `lady` WHERE name LIKE 'らむ' 上記で検索すると 「とも」って名前まで引っ張ってきます。 SELECT * FROM `lady` WHERE name LIKE 'らな' だと 「るる」って名前も引っ張ります。 どうも「ら行」の検索がうまく出来ないようです。 何か回避方法はあるのでしょうか? よろしく御願いします

    • ベストアンサー
    • MySQL
  • SQL文がおかしいとエラーが出ます

    データベースを作り、サーブレットを通してjspに出力させるプログラムを作っているのですが 実行するとYou have an error in your SQL syntaxとエラーが出ます。 SQL文がおかしいらしいので見ていただきたいです。DAOパターンを使用しています。 SQL文でやりたいことは言葉(kotoba)を入力するとその言葉にあてはまるカラム(colom)から賃金(kane)の合計を計算して出力させたいです。 String sql = "select sum(kane) from employee where colom 'kotoba'=" + kotoba; 文章が変でしたら教えてください。よろしくお願いします

    • ベストアンサー
    • MySQL
  • MySQL 配列もどきを条件式に

    MySQL5.5です PostgreSQLからMySQLへ移行作業をしています PostgreSQLの配列型(文字)をMySQLのBLOB型にして格納しています {"ABC", "EFG"}といった形式で格納しているのですが 以下のSQL文をMySQLで使用できる形にしたいのです SELECT * FROM table WHERE Test[1] LIKE '%%' TestがPostgreSQLでの配列になります エラーメッセージは以下の通りです db_query error. 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 '[1] like '%%' 以下のようにAS句で適当な名称を与えて引き出せないかと考えたのですが、「Unknown column 'tst'」となり取得することはできませんでした SELECT *, REPLACE(SUBSTRING(Test, 1, LOCATE(',',Test) - 1), '{', '') AS tst FROM table WHERE tst LIKE '%%'; 何か良い方法などありましたら教えてください、よろしくお願いします

    • ベストアンサー
    • MySQL
  • LIKEを使用したレコード抽出について

    OracleでLIKEを使用したレコード抽出で困っています。 あるテーブル(TAB_A)が以下のような属性だとします。 ------------- COL1 CHAR(5) COL2 CHAR(5) このとき、このテーブルに次のようにデータが格納されています。 COL1  COL2 -------------- ABC==  12345 [=]は便宜上1バイトスペースを表す このテーブルを対象として (1) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC%'; (2) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC==';   ([=]は便宜上1バイトスペースを表す) (3) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC'; というSQLを発行した場合に、いずれもレコードが抽出されてしまいます。(1)(2)の場合は当然だとは思うのですが、(3)でもレコードが抽出されることが理解できません。このようなことが起こり得るのでしょうか。

  • likeの使い方について

    すみません。教えてください。。 ACCESSで下記2つのテーブルをunionでくっつけて nameの右端(1桁目)が同一のもの(CとCCなど)を抽出するため 下記のような構文を構築したのですが抽出されません。。 お手数ですがこちら何が原因となっているか教えていただけないでしょうか。。 よろしくお願い致します。 id name id name 1 a 1 a 2 b 2 b 3 c 3 cc 4 d 5 ee 5 e select * from (select * from tb1 union select * from tb2) as A where name like '*c' or name like '*d' or name like '*e'

  • where句のlikeと=の違いについて

    Postgresバージョン7.1.1からバージョン7.4.6にしたところ困ったことがあります。 テーブル名: hoge カラム名: col (←varchar(12)) データの中身はまるっきり同じ物が入っています。 という環境です。 そこで、SQLを実行するとバージョンによって結果が異なり不可解なのです。何か分かることがありましたら返事をお願いします。 [実行したSQL] select col from hoge where col = 'コル' select col from hoge where col like 'コル' [7.1.1] 共に、答えは一つだけ'コル'が表示されます。 [7.4.6] likeの時は'コル'が一つだけ表示されます。 =の時は何十個か出てきます。 以上、宜しくお願い致します。

  • 複数カラムに対するLIKE文の最適化

    column1~column3のデータに文字検索をしたいのですが、 下記のような不恰好なSQLしか思いつきません、、。 select * from tb where   ( column1 like '%word1%' or column2 like '%word1%' or column3 like '%word1%' ) and ( column1 like '%word2%' or column2 like '%word2%' or column3 like '%word2%' ) and ( column1 like '%word3%' or column2 like '%word3%' or column3 like '%word3%' ) 試しに、 select * from tb where   ( ( column1 or column2 or column3) like '%word1%' ) and ( ( column1 or column2 or column3) like '%word2%' ) and ( ( column1 or column2 or column3) like '%word3%' ) と考えたのですが、これですと検索結果0件になってしまいます。 もっとスマートなSQL文がありましたら、ご教授頂きたいです。

    • ベストアンサー
    • MySQL
  • PHP+MySQL syntaxエラー

    SELECT * FROM option WHERE id='W01' SELECT * FROM option WHERE id='A01' を実行させたところ You have an error in your SQL syntax near 'option WHERE id='W01'' at line 1 You have an error in your SQL syntax near 'option WHERE id='A01'' at line 1 というエラーが返ってきました。 optionテーブルがあり、idというフィールドもあり、 idフィールドでW01、A01ともに存在します。 どなたかお答え頂ければと思います。

    • ベストアンサー
    • MySQL