转义 SQL 字符串中的 & 符号字符

我试图在 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);
433119 次浏览

你可以用

set define off

使用它不会提示输入

Escape 在默认情况下设置为 \ ,所以不需要设置它; 但是如果需要,不要用引号括起来。

Ampersand 是 SQL * Plus 替代变量替代变量标记; 但是您可以使用 改变它,或者在您的情况下更有用的是将其完全关闭,具体方法如下:

set define off

那么你根本不需要费心逃避价值。

而不是

node_name = 'Geometric Vectors \& Matrices'

使用

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

38是与号的 ascii 代码,在这种形式下,它将被解释为一个字符串,没有别的。我试过了,奏效了。

另一种方法是使用 LIKE 和下划线来代替’&’字符:

node_name LIKE 'Geometric Vectors _ Matrices'

你找到其他唱片的可能性也很小,只有这一个字符有所不同。

直接从 Oracle sql 基本原理书

SET DEFINE OFF
select 'Coda & Sid' from dual;
SET DEFINE ON

如果没有设置定义,一个人将如何逃脱它。

REPLACE(<your xml column>,'&',chr(38)||'amp;')

这种方法同样有效:

select * from mde_product where cfn = 'A3D"&"R01'

通过在字符串中使用双重 qoutes "&"&定义为文本。

set escape on
... node_name = 'Geometric Vectors \& Matrices' ...

或者选择:

set define off
... node_name = 'Geometric Vectors & Matrices' ...

第一个选项允许您使用反斜杠来转义 & 。

第二个关闭 & “ global”(不需要在任何地方添加反斜杠)。您可以通过 set define on再次打开它,并且从与号上的那一行将得到它们的特殊意义,所以您可以为脚本的某些部分而不是其他部分关闭它。

为了逃避 &,你可以尝试以下方法:-

  1. set scan off
  2. set define off
  3. 然后用 \&替换 &
  4. &&代替 &

至少得有一个能用。

另外,如果您使用 PL/SQL 开发人员,那么在 SQL 窗口的底部有 & 偶像,请到那里并且 关闭 it 。注意,在旧版本中这个选项不存在。

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

我编写了一个正则表达式来帮助查找和替换 INSERT 中的“ &”,我希望这对某些人有所帮助。

诀窍是确保“ &”与其他文本一起出现。

找到 “(\'[^\']*(?=\&))(\&)([^\']*\')”

更换 “$1' || chr(38) || '$3”

我知道这很糟糕。以上这些方法都不管用,但我找到了一个解决办法。请特别注意使用撇号[’]之间的空格,否则它会被转义。

SELECT 'Hello ' '&' ' World';


Hello & World

不客气;)

--SUBSTITUTION VARIABLES
-- these variables are used to store values TEMPorarily.
-- The values can be stored temporarily through
-- Single Ampersand (&)
-- Double Ampersand(&&)
-- The single ampersand substitution variable applies for each instance when the
--SQL statement is created or executed.
-- The double ampersand substitution variable is applied for all instances until
--that SQL statement is existing.
INSERT INTO Student (Stud_id, First_Name, Last_Name, Dob, Fees, Gender)
VALUES (&stud_Id, '&First_Name' ,'&Last_Name', '&Dob', &fees, '&Gender');
--Using double ampersand substitution variable
INSERT INTO Student (Stud_id,First_Name, Last_Name,Dob,Fees,Gender)
VALUES (&stud_Id, '&First_Name' ,'&Last_Name', '&Dob', &&fees,'&gender');