ExcelVBA・SQL|文字列中のシングルクォーテーションの扱い方やエスケープ方法

エクセルVBA VBAでSQL



SQLのWHERE文で、シングルクォーテーション「’」が文字列に入っているときには、どのようにすればよいのか質問が来ます。

SQLではシングルクォーテーションが文字列の両端を表す特殊な記号と認識されてしまうので、文字列の一部として認識させるためにシングルクォーテーションを2つ重ねて「”」のように記述します(これをエスケープといいます。)

今回は、シングルクォーテーションを文字列の一部として認識させる方法(エスケープ方法)について徹底的にお伝えしていきます☆



ExcelVBA・SQL|文字列中のシングルクォーテーションの扱い方やエスケープ方法

文字列中のシングルクォーテーションは「”」のように2つ重ねて記述する

SQLでの文字列は、シングルクォーテーション「’」で囲みます。

したがって、文字列中にシングルクォーテーション「’」がある場合は、シングルクォーテーション自体を文字列の一部として認識してくれません。

例えば、以下のAccessのテーブル「商品マスタ」にレコードを追加するとします。

SQLを使って、文字列中にシングルクォーテーションが使われている商品名「チョコ’カカオ70’」を登録しようとします。

  • 商品コード:C2
  • 商品名:チョコ’カカオ70′
  • 価格:300
vSQL = "INSERT INTO 商品マスタ VALUES('C1','チョコ'カカオ70'',200,'ガーナ');"

すると「クエリ式’チョコ’カカオ70”’の構文エラー、演算子がありません」とエラーが表示されてしまいます。

そこでシングルクォーテーションを「”」のように2つ重ねて文字列として認識させます。

'チョコ'カカオ70''→'チョコ''カカオ70'''

vSQL = "INSERT INTO 商品マスタ VALUES('C1','チョコ''カカオ70''',200,'ガーナ');"

【実行結果】

以上のように、シングルクォーテーションのような文字本来の意味とは別の意味に解釈される文字を文字列の一部として認識させることを「エスケープ」と言います。

シングルクォーテーションを文字列として認識させる際の注意点

注意点としては、決して「’チョコ’カカオ70”」の一番外側にあるシングルクォーテーションを2つ重ねるのではない、ということです。

まず大前提としてSQLでは文字列をシングルクォーテーション「’」で囲む必要があります。

つまり、文字列の両端は必ずシングルクォーテーション「’」になるのです。

文字列中にあるシングルクォーテーションを単なるの記号(文字列)として使いたいときは、普通に「’」とだけ書いてはいけません。

1つの「’」だけでは、それが単なる記号なのか、文字列の両端を表す記号なのかが区別できないのです。

そこで、シングルクォーテーション「’」を単なる文字列の一部として扱いたいときは「”」と2つ続けて書きます。

文字列の内部でシングルクォーテーション「’」が2つ続いた場合には、文字列を表す両端の特別な記号ではなく、「’」を単なる文字列の一部として認識してくれるのです。

ちなみに、今回説明したシングルクォーテーションを2つ重ねるエスケープはSQLにおける記述方法です。

ExcelVBAでは文字列を表す特殊記号はダブルクォーテーション「”」なので、ダブルクォーテーションを文字列の一部としてエスケープさせたい場合は「””」のようにダブルクォーテーションを2つ重ねて記述します。

つまり、ExcelVBAでSQLを扱う場合はエスケープ方法は以下のように使い分ける必用があるので注意してください。

  • SQLの部分 → シングルクォーテーションを2つ重ねる
  • SQLの部分以外 → ダブルクォーテーションを2つ重ねる

まとめ

今回はSQLのWHERE文で、シングルクォーテーション「’」を文字列の一部として認識させる方法についてお伝えしてきました。

シングルクォーテーションを文字列の一部として認識させるためには、シングルクォーテーションを2つ重ねて「”」のように記述します。

具体的には以下のような記述になります。

'チョコ'カカオ70''→'チョコ''カカオ70'''

Accessでは商品名にシングルクォーテーションを使いたい場合などが想定されますので、ぜひ今回のことが役立ててくださいね☆




VBAでSQL
ブイサバ【Excel VBAサバイバル】~とりあえずここに来れば解決できる~

コメント

  1. […] […]

タイトルとURLをコピーしました