1. ホーム
  2. sql

[解決済み] SQL文字列内のアンパサンドキャラクターのエスケープ

2022-04-23 20:07:46

質問

SQLデータベースで、ある行の名前を照会しようとしていますが、その行にはアンパサンドがあります。エスケープ文字を設定し、アンパサンドをエスケープしようとしましたが、なぜかうまくいきませんし、何が問題なのかよくわかりません。

Set escape '\'
    select * from V1144engine.T_nodes where node_id in(
    select node2_id from V1144engine.T_edges where node1_id in(
    select node2_id from V1144engine.T_edges where node1_id in(
    select node2_id from V1144engine.T_edges where node1_id = 
      (select node_id from V1144engine.T_nodes where node_name = 'Geometric Vectors \& Matrices')))
    and edge_type_id = 1)
    and node_type_id = 1
    and node_id in (
    select node2_id from V1144engine.T_edges where node1_id =
      (select node_id from V1144engine.T_nodes where node_name = 'Algebra II')
    and edge_type_id = 2);

と似たような解決策を持っていますが この質問 しかし、この2つの問題は全く異なるものです。最終的には同じ解答になるかもしれませんが、だからといって問題が同じとは限りません。

どのように解決するのか?

の代わりに

node_name = 'Geometric Vectors \& Matrices'

使用

node_name = 'Geometric Vectors ' || chr(38) || ' Matrices' 

38はアンパサンドのアスキーコードで、この形では文字列として解釈され、それ以外のものは解釈されません。試してみたところ、うまくいきました。

他の方法としては、LIKEと'&'文字の代わりにアンダーラインを使用することもできます。

node_name LIKE 'Geometric Vectors _ Matrices' 

この1文字だけが違う他のレコードも見つかる可能性は、かなり低いでしょう。