• ベストアンサー

SQLITE3のSELECT文で『%』をエスケープするには

■環境 WinXP Sqlite3 ■質問 『%』と言う文字を含むカラム名が取り出せません。 INSERT時には、\%としてエスケープ出来たのですが SELECT時\%としても unrecognized token: "\" と言うエラーが出てしまいます。 手がかりになる情報をお持ちの方教えて頂けませんでしょうか?

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

たとえば項目名が「zennen%」なら、項目名をすべてダブルクォーテーション で括ってください("zennen%"のように)。 個人的には多少冗長でも「percnet」にするほうを選びますが。

akaginoyama
質問者

お礼

せっかく教えて頂いたのですが、別のやり方で処理しました 修正する余裕が無いので、頂いた情報を確認できておりません が回答には大変感謝しております。 次回同じ状況になった際に試してみたいと思います。 今回は、%を別の文字に置換え、表示の際に戻すと言う方法で 回避しました。 時間が取れずに返事が遅れて申しわけありませんでした。

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

その他の回答 (1)

  • hegemon
  • ベストアンサー率72% (21/29)
回答No.1

'%'はLIKEなどでワイルドカードとして使うので、SELECT文では問題になるのでしょう。 SQLite3は使ったことがないので不明なのですが、SQL Serverなどでは下記のようにして指定できたはずです。 [tableName].[column%Name]

akaginoyama
質問者

お礼

回答ありがとうございます。 せっかく教えて頂いたのですが、うまくいかず %を別の文字に置換え、表示の際に戻すと言う方法で 回避しました。 時間が取れずに返事が遅れて申しわけありませんでした。

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

関連するQ&A

  • sqlite select 表示されない

    原因が分からず困っております。 SQLITEで SELECT * from zip limit 5; だと表示されるのですが SELECT zip7 from zip limit 5; のようにcolumnを指定すると表示されません。 エラーも出ないし空白が5行出ているので、プログラム自体は動いているようなのですが・・・。 ※SELECT zip6 from zip limit 5; のように存在しないcolumnを指定するときっちりエラーが出ています。 環境はCENTOS+SQLITE2+poderosa コマンドラインで実行しています。 宜しくお願いします。

  • INSERT文のSELECT部分の更新

    insert into selectについて教えてください。 あるテーブルからselectした値と、連続する値を 同時にinsertするする事はできますでしょうか? 使用DBはOracle9iです。 例えば、以下のようなテーブルがあった時に テーブルA カラム1 カラム2 カラム3 カラム4 この時に、カラム1,カラム2,カラム3を別のテーブルからselectし、 カラム4には「100001」から順に値を1ずつ増やしてながら セットしたい場合、1つのSQLで実行する事は可能でしょうか? ヒントなどいただけたらと思います。よろしくお願いします。

  • phpからsqliteにselect抽出

    phpからsqliteにselect抽出しています。 $sql = "select * from Table where C=?" $st = $db->prepare($sql); $st->bindParam(1, $key, PDO::PARAM_STR); $st->execute(); while ($row = $st->fetch(PDO::FETCH_ASSOC)) { *** *** } でエラーにはなりませんが、データがとれません。 updateやinsertで?(インジェクション)はうまくいくのですが、Selectでなぜ取得できないのでしょうか? bindParamをarrayにしたりprepare をqueryにしたりしましたが、 データが1件しか取れなかったりします。

    • ベストアンサー
    • PHP
  • Sqliteで使えない文字。

    Sqlite3にて 列名やデータ内で使えない文字列(記号等の文字コード)を教えてください。 調べてみた情報では 改行や区切り文字などの基本的なことしか見つかりませんでしが 実際に使っていると、半角スペース等が混入している場合 全てではありませんが、データベース内で明らかに存在するのに検索できないなどの場合 があるようです。 一つずつ調べてエスケープ処理をすることは現実的に不可能なので 独自にエスケープ処理等を書かれている方に どのような文字列をエスケープしていますでしょうか?

  • SQLiteでカラム情報の取得ってできるんですか?

    SQLiteを使ってみようと思い試しているのですが、カラム名と属性情報の 一覧を表示するコマンドが分かりません。 調べてもどうも見つからないので教えていただきたいと思います。 MySQLやOracleなんかでしたら、desc table名; という構文でカラム情報を 取得することができますが、SQLiteではできないようです。 .helpコマンドで調べてみても、テーブル一覧は見つかりますがカラム一覧は出てきません。 ご存知の方教えていただけると助かります。

  • sqlite3の.mode設定した状態を保存したい

    sqlite3を使って学習しています。 コマンドプロンプトの設定について教えて下さい。 sqlite> select * from goods; 1|デジタルカメラ|35000 2|ノートPC|72000 3|プリンター|27500 sqlite> では、カラム名などの情報が表示されず見ずらいです。 なので起動するたびに下記のようにしています。 sqlite> .header on sqlite> .mode column sqlite> select * from customer; id name old address ---------- ---------- ---------- ---------- 1 aaa 52 bbb 2 谷 26 名古屋 2 近藤 32 東京 4 山下 18 大阪 5 長谷川 26 大阪 2 萩野 22 東京 1 aaa 52 bbb 4 廣瀬 12 山口 sqlite> 常にこの設定のままにしておきたいです。 いろいろ調べてみたのですが解決しませんでした。 設定を保存しておく方法はないのでしょうか。

    • ベストアンサー
    • MySQL
  • SQLITEで全角テーブルアップデート

    SQLITEで全角テーブルアップデート こんにちは。SQLITEでアップデートをしたいと思っています。問題がテーブル名が全角文字です。 テーブル名: T_在庫 フィールド: 商品コード,在庫 001,3 002,2 003,5 下記のSELECT文は動きます。 SELECT "T_在庫"."商品コード","T_在庫"."在庫" FROM "T_在庫" 次にUPDATEをかけたいと思っています。 UPDATE "T_在庫" SET "T_在庫"."在庫" = 0 [Err] 1 - near ".": syntax error このように表示されます。 試しに、ダブルクォテーションを外しても同じです。 どのようにすればSQLITEでアップデートがかけることができるのでしょうか?文法は間違っていないとは思うのですが・・・

  • yahooウィジェットのSQLiteに関して

    どうしてもわからず、質問させてください。 INSERTの所で 1 near "[i]" :syntax error と出てしまいます。 配列にはちゃんとデータが入っていることを確認しました。 どこがおかしいのかお分かりになる方すいませんが、お願いします。 またyahooウィジェットのSQLiteはトランザクションは使えるのか知っている方いましたら合わせてお願いいたします。 ▼ソースは以下のようなものです var db = new SQLite(); //オープン db.open( "オーブンファイル名" ); //テーブル存在確認 var result = db.query( "SELECT * FROM sqlite_master WHERE type='table' AND name='テーブル名'" ); if ( result.getRow() == null ) { result.dispose(); db.exec( "CREATE TABLE テーブル名(id int(10),name varchar(255))" ); FileRead( "ファイル読み込み" ); for (var i in lineArray) { alert(lineArray[i]); db.exec( "INSERT INTO テーブル名(id, name) VALUES(i, lineArray[i])" ); } } db.close;

  • addslashesによるエスケープ

    フォームからのデータをデータベースに登録する際、addslashesを使用して登録データをエスケープしています。 SJISでデータを処理しているのですが、addslashesでエスケープする際に最後がエスケープされるデータの時困っています。 例えば登録したいデータが「サンプル表」などの時、addslashesすると INSERT INTO ・・・・, 'サンプル表\', ・・・ とINSERT文ができるのですが、これだとエラーが出ます。 こういう場合、皆さんはどのような処理をされているのでしょうか? 今は、エスケープする必要のあるデータ処理には INSERT INTO ・・・・, 'サンプル表\ ', ・・・ のように半角スペースを入れて、データを抽出した際、末尾の半角スペースを取り除いています。 他に思いつくのは、登録するデータをエスケープした際に末尾が「\」かどうか調べて、「\」の場合半角スペースなどを挿入するという方法などです。 もっといい処理があれば、ご教授いただければと思います。 よろしくお願いいたします。 長文ですみません。

    • ベストアンサー
    • PHP
  • SQL(PostgreSQL) select文

    SQLを始めたのですが、少しつまずいたので、質問させてください。 住所録検索等で、 SELECT * FROM test WHERE name LIKE '%goo%'; と書くと、nameというカラム名から goo という文字列の入ったレコードを 検索できると思います。 そこで、この goo という文字列を test テーブル全体から検索したいのですが わかりません。 teat テーブル全体から(どこのカラム名からでも)検索の仕方を教えてください。 初歩的な質問ですみません。 参考HPでもかまいません。