如何插入包含"&"的字符串

And*_*ton 40 sql oracle sqlplus escaping

如何编写包含&字符的insert语句?例如,如果我想将"J&J Construction"插入数据库中的一列.

我不确定它是否有所作为,但我使用的是Oracle 9i.

tar*_*ate 61

我继续忘记这一点并再次回到它!我认为最好的答案是迄今为止提供的答复的组合.

首先,&是sqlplus/sqldeveloper中的变量前缀,因此问题 - 当它出现时,它应该是变量名的一部分.

SET DEFINE OFF将以这种方式停止sqlplus解释.

但是如果你需要使用sqlplus变量文字和字符呢?

  • 您需要SET DEFINE ON才能使变量起作用
  • 并设置ESCAPE ON以逃避&的使用.

例如

set define on
set escape on

define myvar=/forth

select 'back\\ \& &myvar' as swing from dual;
Run Code Online (Sandbox Code Playgroud)

生产:

old   1: select 'back\\ \& &myvar' from dual
new   1: select 'back\ & /forth' from dual

SWING
--------------
back\ & /forth
Run Code Online (Sandbox Code Playgroud)

如果要使用其他转义字符:

set define on
set escape '#'

define myvar=/forth

select 'back\ #& &myvar' as swing from dual;
Run Code Online (Sandbox Code Playgroud)

设置特定的转义字符时,您可能会看到"SP2-0272:转义字符不能是字母数字或空格".这可能意味着你已经定义了转义字符,并且事情变得非常自我指涉.避免这个问题的干净方法是首先设置逃逸:

set escape off
set escape '#'
Run Code Online (Sandbox Code Playgroud)


ham*_*mcn 16

如果你是从SQLPLUS使用它

SET DEFINE OFF  
Run Code Online (Sandbox Code Playgroud)

阻止它踩踏并作为一个特例

  • 也适用于SQL Developer (3认同)

小智 11

另一种解决方案,使用串联和chr函数:

select 'J' || chr(38) || 'J Construction' from dual;
Run Code Online (Sandbox Code Playgroud)


Gre*_*gle 5

正确的语法是

set def off;
insert into tablename values( 'J&J');
Run Code Online (Sandbox Code Playgroud)


Han*_*ans 5

总是有chr()函数,它将ascii代码转换为字符串.

即.类似于:INSERT INTO表VALUES(CONCAT('J',CHR(38),'J'))


小智 5

您可以插入诸如'J'||'&'||'Construction'这样的字符串。效果很好。

insert into table_name (col_name) values('J'||'&'||'Construction');
Run Code Online (Sandbox Code Playgroud)


aem*_*mre 5

INSERT INTO TEST_TABLE VALUES('Jonhy''s Sport &'||' Fitness')
Run Code Online (Sandbox Code Playgroud)

此查询的输出:Jonhy's Sport & Fitness