• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:sql文に'"*%|が含む場合の対処法に関して)

sql文に'*%|が含む場合の対処法について

このQ&Aのポイント
  • 現在システム構築を行っている際、お客様の仕様で特殊文字を制限することができず、LIKE検索などへの対処方法に困っています。
  • エスケープ文字を使用して対処する方法は分かっているが、今回はエスケープ文字を割り当てることができません。
  • このような場合、どのような対応をとればよいのでしょうか?

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

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

エスケープ文字を ^ にしたら 文字の ^ は ^^ で表現します。 <例> ^で前方一致検索 SELECT NAME FROM EMPLOYEE WHERE NAME LIKE '^^%' ESCAPE '^'

yxa98632
質問者

お礼

なるほど。そうなるんですか。 勉強になります。 じゃあ、今回の場合エスケープを用いても 問題がなさそうですね。任意のエスケープ文字を 設定して逃げる仕様にします。 丁寧にSQL文まで記述していただきありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • SQL文は、そもそもどこに書けばいいのでしょうか?

    SQL文は、そもそもどこに書けばいいのでしょうか? DBを初めて扱う超初心者です。 いろいろネットで調べてみたのですが、 よく分からず。。 とある理由から、 すでにDBを利用して構築されたサイトの(ごく小さい規模のものです) SQL文を数行書き換えなければならなくなりました。 使用しているDBは、SQLiteというものらしいです。 htmlやcss、phpやjsなどはエディタに記述するように SQL文というものは、どこ(=何に)に書けばいいのでしょうか? コマンドプロンプト?? なお書きたいのは上書き文で kiji_tというテーブルの 識別子k_data4のなかに "vuitton"または"coach"という 文字が入っていた場合 識別子k_data6に1を入れる という作業です。 以下のように書いてみました。 --------------------------------------- UPDATE kiji_t SET k_data6='1' WHERE k_data4 LIKE '%vuitton%' or k_data4 LIKE '%coach%'; --------------------------------------- 質問をまとめます。 1.SQL文はどこに書けばいいのでしょうか?(コマンドプロンプト??) 2.作業中に、DBのテーブルを、エクセルの用に可視化することはできないのでしょうか? 初心者過ぎる質問で恐縮ですが。。 ご存知の方いらしゃいましたら なにとぞご教授よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • SQL文のエスケープについて質問です。

    SQL文のエスケープについて質問です。 <table></table><tr></tr>=:<%' というデータをDBに登録したいのですが、 置換文字を求められてしまい、うまくいきません。 どのようにエスケープすれば良いのでしょうか。

  • SQLについて

    SQLには Transact-SQL、MySQL、PostgreSQL、PL/SQLといったように種類があります。 使用できる関数が違うとかは分かるのですが、 具体的に何がどう違うかなどははっきり理解できていません。 また、どのSQLをどのような用途で使用するのかなども分かっていません。 また、これに関することで、DBでSQLServerとかOracleとかが関わっていると思われるのですが。 例えば、SQLServerではTransact-SQLを使用して、Oracleでは別のSQL(ここはよく分かっていません)を使用するみたいなことでしょうか? 要はSQLというものがあって、それをコーディングするためのアプリケーションに対応しているものが、各SQLといった事? 例えば、C#、VBA、Java(Transact-SQL、MySQL)などのプログラミング言語(SQL)があって それを使用できるアプリケーションはそれぞれ VisualStudio、Excel、eclipse(SQLServer、Oracle)みたいな意味合いなんでしょうか? よく分からない質問と例えになってしまいましたが、ご回答のほうをよろしくお願いします。

  • LIKE文でエスケープ文字自体をエスケープする方法

    SQLのLIKE文では A LIKE '\%文章' ESCAPE '\' のように、ワイルドカード用の文字列をエスケープする方が用意されています。このとき、条件文にエスケープ文字自体を含める(上のSQL文であれば、「\」をエスケープ文字と定義していながらも、「\%」を「\」「%」と独立した文字として検索にかける)場合はどのように記述したらよいでしょうか。

    • ベストアンサー
    • MySQL
  • sql文

    以下のテーブル テーブル名:t1(num1,kingaku) ,t2(num1,kingaku2) ここでt1.num1(1,2,3) ,t2.num1(3,4,5) とあった場合num1をキーとしてnum1(1,2,3,4,5)となるようなテーブルを作成したいのですが、 どのようなsqlでできるでしょうか? dbはoracle,posgre,mysqlなどでお願いします。

  • SQL関数とレスポンスについて

    業務でJavaとDB(DB2)を使用しています。 最近、SQL関数を使用すべきか否かでちょっと悩んでいます。 SQL関数は確かに便利ですが、使いすぎるとレスポンスが悪くなる、ということはあるのでしょうか? 今はSQLは出来るだけシンプルにして、Javaで補っています。 (例えばGraphic項目から全角スペースを取り除く場合はSQL関数のRTRIMを使わず、DBから取り出した後にJavaで取り除く、など) ご指導よろしくお願いします。

  • SQL文の実行に失敗しました???

    すみませんが、お助けください。私は、PHPの初心者で現在猛特訓でマスター中です。よろしくお願いします。現在、本を購入し、そこに記述されている通りやってみているのですが、今まで上手くできていたのですが、ここの記述ではどうしてもエラーが出てしまいます。そこでお願いで投稿しました。 <利用環境> ・レンタルサーバー/ラピッドサーバー RV-310 ・MYSQL/MySQL 4.1.18 ・「動物名」と「動物の年齢」を入力する練習フォームとPHP ■php内容 insert.php ※フォームは文字数の関係で省略しました <?php // データベースへの接続情報を設定します。 $dbUser = "***"; $dbPass = "***"; $dbHost = "localhost"; $dbName = "***"; // フォームから送信されたデータを取得します。 $animal_c = $_POST['animal_c']; $age_c = $_POST['age_c']; // mysqli_escape_stringを使用してエスケープを行うため、 // magic_quotes_gpcがOnの場合、エスケープされた文字を元に戻します。 if( get_magic_quotes_gpc() ){ $animal_c = stripslashes( $animal_c ); $age_c = stripslashes( $age_c ); } // MySQLとの接続を行ないます。 $db = mysql_connect( $dbHost, $dbUser, $dbPass ) or die( "MySQL DBとの接続に失敗しました" ); // クライアントの文字コードセットをEUC-JPに変更します。 mysql_query( "SET NAMES ujis", $db ); // データベースを選択します。 mysql_select_db( $dbName, $db ) or die( "データベース" . $dbName . "との接続に失敗しました。" ); // エスケープ処理を行います。 // 数値が入る事が予測される値もエスケープ処理は必ず行います。 $animal_c = convSqlString( $animal_c ); $age_c = convSqlString( $age_c ); // SQL文を記述します。 // フォームより送信されたデータを追加します。 $query = "INSERT INTO zoo SET animal_c='$animal_c', age_c='$age_c'"; // SQL文を実行します。 mysql_query( $query, $db ) or die( "SQL文の実行に失敗しましたbbbbb" ); // SQL文に使用するための文字列をエスケープする関数です。 function convSqlString( $string ){ global $db; // SJISでは2バイト目にメタ文字\のコード(0x5c)を含む場合に、 // このコードもエスケープしてしまうので、 // EUC-JPに変換してエスケープします。 // Linuxでの実行などファイルをEUC-JPにエンコードした場合には // コメントアウトしてください。 // $string = mb_convert_encoding( $string, "EUC-JP", "SJIS" ); // mysqli_escape_stringを使うことにより、 // 'や\などが適切にエスケープされます。 // MySQLのバージョン4.1.2未満を使用している場合は、 // 下の1行を$string = mysql_escape_string( $string ); // に変更してください。 $string = mysql_escape_string( $string ); // 再度SJISに変換して返します。 // Linuxでの実行などファイルをEUC-JPにエンコードした場合には // コメントアウトしてください。 // $string = mb_convert_encoding( $string, "SJIS", "EUC-JP" ); return $string; } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=EUC-JP"> <title>PHPサンプルスクリプト</title> </head> <body bgcolor=#FFFFFF> データを追加しました。 </body> </html> <? // データベースから切断します。 mysql_close( $db ); ?> ■エラー内容(ブラウザ表示) SQL文の実行に失敗しましたbbbb でエラー構文が出てしまいます。 もしお分かりの方がいればアドバイスいただければ幸いです。

    • 締切済み
    • PHP
  • 長いSQL文を実行するには?

    Oracle10gを使用しています。 数千バイトある長いSQL文(insert処理です)を実行したいのですが、どうやらバイト数の制約の為にinsert出来ません。 何か対処方法があれば、教えてください。 よろしくお願いします。

  • oracle,sql-server,DB2,フリーDB

    oracle 10g sql-server 2005 DB2 フリーDB(mysqlなど) はどれがいいでしょうか? 一応3年ぐらい前までは開発現場にいたので一通り知っています。 すべて経験ありますが管理はしたことはありません。 価格ならフリーが一番でしょう。信頼性で言うとoracle でもコストが高い。 MSとくっつくならsql-serverだと思うのですが。 まだ社内でどの程度の規模になるかも把握し切れていませんが、 やはり無難にoraが一番でしょうか?? 後々に業務システムの開発をします。 javaにするかVB,delphiなどにするかも決まってません。 DB2なら一応資格も持っているんですけどね。 管理、構築の容易さなどそれぞれの特徴も教えてください。

  • SQLスクリプト内で、${変数}と記述しても値を認識できない?

    USER.TABLE_LNK_TRG.shにて、トリガ作成スクリプトUSER.TABLE_LNK_TRG.sqlをコンパイルしようとしています。 USER.TABLE_LNK_TRG.shとUSER.TABLE_LNK_TRG.sqlともに 変数ORACLE_SID_1の値としてdb1、 変数ORACLE_SID_2の値としてdb2 が入っているはずなのですが、USER.TABLE_LNK_TRG.sql内では ${ORACLE_SID_1}と${ORACLE_SID_2}がそのまま文字列として解釈され (変数の値であるdb1、db2にはならない)、コンパイルに失敗します。 逆にUSER.TABLE_LNK_TRG.sql内で、${ORACLE_SID_1}と${ORACLE_SID_2} を使わず、直接db1、db2と記述すると成功します。 トリガ作成スクリプトUSER.TABLE_LNK_TRG.sql内で、${変数}は使えないのでしょうか? 環境はOSはSolaris、DBはOracle9i、シェルはBシェルです。 _______________________________________________________________ ~USER.TABLE_LNK_TRG.sh~ #!/bin/sh ORACLE_SID_1="db1" ORACLE_SID_2="db2" #トリガコンパイル sqlplus aaa/aaa <<-EOF @USER.TABLE_LNK_TRG.sql quit EOF exit ______________________________________________________________ ~USER.TABLE_LNK_TRG.sql~ CREATE OR REPLACE TRIGGER USER.TABLE_LNK_TRG BEFORE UPDATE ON USER.TABLE FOR EACH ROW declare begin update TABLE@${ORACLE_SID_1}_lnk set col = :new.col; update TABLE@${ORACLE_SID_2}_lnk set col = :new.col; exception when others then null; end; / _______________________________________________________________ ※${ORACLE_SID_1}、${ORACLE_SID_2}のままコンパイルされるので、  ${ORACLE_SID_1}_lnkのDB環境、${ORACLE_SID_2}_lnkのDB環境が存在せずコンパイルエラー。  逆に直接db1、db2と記述するとdb1_lnkのDB環境、db2_lnkのDB環境が存在するので正常にコンパイル。