转义SQL字符串中的&符号

Sla*_*off 127 sql oracle sqlplus escaping

我试图在我的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);
Run Code Online (Sandbox Code Playgroud)

虽然这与这个问题有类似的解决方案,但问题却有很大不同.他们可能最终得到相同的解决方案,但这并不意味着问题是相同的.

Imr*_*ich 189

代替

node_name = 'Geometric Vectors \& Matrices'
Run Code Online (Sandbox Code Playgroud)

使用

node_name = 'Geometric Vectors ' || chr(38) || ' Matrices' 
Run Code Online (Sandbox Code Playgroud)

38是&符号的ascii代码,在这种形式中它将被解释为一个字符串,没有别的.我尝试了它,它的工作原理.

另一种方法可能是使用LIKE和下划线而不是'&'字符:

node_name LIKE 'Geometric Vectors _ Matrices' 
Run Code Online (Sandbox Code Playgroud)

你也会找到一些其他记录的可能性非常低,只有这一个字符有所不同.

  • 而不是非直观的`chr(38)`,你可以做`node_name ='Geometric Vectors&'|| '矩阵' (40认同)
  • 对于和我一样的其他可怜的困惑的灵魂,请注意它是`chr(38)`,*不是*`char(38)`。 (3认同)

Ale*_*ole 100

Escape \默认设置为,因此您无需进行设置; 但如果你这样做,不要用引号括起来.

Ampersand是SQL*Plus 替换变量标记; 但你可以改变它,或者更有用的是在你的情况下完全关闭它,用:

set define off
Run Code Online (Sandbox Code Playgroud)

然后你根本不需要去逃避价值.

  • 转义* character *默认设置为`\`,但是布尔参数`escape`默认设置为OFF。因此,OP可能不需要设置转义字符,但是他/她至少需要“ SET ESCAPE ON”才能起作用。或者,当然,可以使用其他任何更好的解决方案。 (2认同)

Ank*_*kur 42

您可以使用

set define off
Run Code Online (Sandbox Code Playgroud)

使用它,它不会提示输入


小智 27

直接来自oracle sql基础知识书

SET DEFINE OFF
select 'Coda & Sid' from dual;
SET DEFINE ON
Run Code Online (Sandbox Code Playgroud)

没有设置定义,如何逃脱它.

  • SET DEFINE ON的添加很有帮助. (2认同)

Shi*_*pta 11

为了逃脱,&您可以尝试以下方法:-

  1. set scan off
  2. set define off
  3. set escape on 然后替换&/&
  4. 替换&&&

其中之一应该至少工作。

另外,如果您使用的是 PL/SQL 开发人员,那么sql 窗口底部有 &图标,请去那里禁用。请注意,在旧版本中,此选项不存在。

还要确保 set define off 写在脚本的最开头。