oracle中的转义符小结

本文介绍在 Oracle SQL 中如何处理字段内的特殊字符,包括单引号、百分号及其它特殊符号。提供了多种转义字符的方法,并展示了如何在 SQL 语句中正确使用这些特殊字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、单引号

那么如果字段的内容中包含了单引号要怎么插入呢?例如:It's fine。方法同样有三
·方法一:使用转义字符
   SQL > Select 'test' || '''' from dual;
   注意:这里的''''四个单引号是什么意思呢?首先第一个和最后一个都是Oracle中的字符串连接符,这个没有异议。那么第二个'和第三'又表示什么意思呢?第二个'是一个转义字符
           第三个'才是我们真正的内容
·方法二:同样是使用转义字符,只不过方式不同而已
   SQL > Select 'test ''' from dual;
   注意:这里的第二个,第三个'就是我们上面方法一中提到的转义符和真正的内容
·方法三:在SQL中将'替换成chr(39),因为chr(39)是'的ASCII码
   SQL > Select 'It' || chr(39) || 'fine' from dual;

 

2、在SQL语句中将'&'替换成chr(38),因为chr(38)是‘&’的ASCII码

我转载的源地址:http://blog.163.com/fly_sky_java/blog/static/14042223420105221041496/


在字段里查找'%',涉及到Oracle的转义字符,现总结如下:

SQL> select * from test;

TEST
--------------------
sdd_kk
d'd
dfsfsa
dffa%asfs
12345
1%2345
1%54321
2%54321
%%54321
A&B

已选择9行。

        其中包含特殊的字符分别为%,_,&,有可能包含这些字符的数据含有错误,或者需要查找包含这些字符的数据。


SQL> select * from test where test like 'sdd _%' escape ' ';

TEST
--------------------
sdd_kk

        转义字符为' ';

SQL> select * from test where test like 'sdd\_%' escape '\';

TEST
--------------------
sdd_kk

转义字符为'\';


SQL> select * from test where test like 'sdd=_%' escape '=';

TEST
--------------------
sdd_kk

        转义字符为'=';

SQL> select * from test where test like 'sdd/_%' escape '/';

TEST
--------------------
sdd_kk

          转义字符为'/';

SQL> select * from test where test like 'sddd_%' escape 'd';

未选定行

        转义字符为d,没有实现转义功能;

SQL> select * from test where test like '%\_%' escape '\';

TEST
--------------------
sdd_kk

        查找包含所有'_'的字段。

        同理:通过这种方法查找含有'%'的所有字段:

SQL> select * from test where test like '%\%%' escape '\';

TEST
--------------------
dffa%asfs
1%2345
1%54321
2%54321
%%54321

        但是'&'不能通过转义字符查找:

SQL> select * from test where test like '%\&%' escape'\';
select * from test where test like '%\&%' escape'\'
                                   *
第 1 行出现错误:
ORA-01424: 转义符之后字符缺失或非法

        可以通过另外的方式进行转义:

SQL> select ascii('&') from dual;

ASCII('&')
----------
        38

SQL> select * from test where test like '%'||chr(38)||'%';

TEST
--------------------
A&B

           '''的转义:

SQL> select * from test where test like '%''%';

TEST
--------------------
d'd

特殊符号的数据的插入

SQL> insert into test values('test&test');
输入 test 的值: test
原值    1: insert into test values('test&test')
新值    1: insert into test values('testtest')          -虽然插入,但是数据不对。

已创建 1 行。

SQL> show define
define "&" (hex 26)
SQL> set define off
SQL> show define
define OFF
SQL> insert into test values('test&test');

已创建 1 行。

SQL> show escape
escape OFF
SQL> set escape on
SQL> show escape
escape "\" (hex 5c)
SQL> insert into test values('test\&test');

已创建 1 行。

SQL> select * from test;

TEST
--------------------
sdd_kk
d'd
dfsfsa
dffa%asfs
12345
1%2345
1%54321
2%54321
%%54321
A&B
testtest

TEST
--------------------
test&test
test&test

已选择13行。

SQL> commit;

提交完成。

SQL> select * from test;

TEST
--------------------
sdd_kk
d'd
dfsfsa
dffa%asfs
12345
1%2345
1%54321
2%54321
%%54321
A&B
testtest

TEST
--------------------
test&test
test&test

已选择13行。

SQL> insert into test values('test\%test');

已创建 1 行。

SQL> insert into test values('test\_test');

已创建 1 行。

SQL> insert into test values('test\'test);
insert into test values('test'test)
                              *
第 1 行出现错误:
ORA-00917: 缺失逗号


SQL> insert into test values('test''test');

已创建 1 行。

SQL> select * from test;

TEST
--------------------
sdd_kk
d'd
dfsfsa
dffa%asfs
12345
1%2345
1%54321
2%54321
%%54321
A&B
testtest

TEST
--------------------
test&test
test&test
test%test
test_test
test'test

已选择16行。


灰色部分转载自: http://www.linuxidc.com/Linux/2011-09/43222.htm

### Oracle 拼接字符串中的转义符使用方法 在 Oracle 数据库中,拼接字符串通常可以通过 `||` 运算符或 `CONCAT` 函数来完成。然而,在某些情况下,可能需要处理特殊字符(如单引号 `'` 或反斜杠 `\`),这时就需要了解如何正确使用转义符。 #### 单引号的转义 在 SQL 中,单引号是字符串的分隔符。如果要在字符串中包含单引号,则需要通过双写单引号的方式来进行转义。例如: ```sql SELECT 'It''s a beautiful day!' AS example_string FROM DUAL; ``` 此查询的结果将是: `It's a beautiful day!` 这种转义方式适用于任何需要在字符串中嵌入单引号的情况[^1]。 #### 反斜杠或其他特殊字符的处理 Oracle 并不直接提供像其他编程语言那样的通用转义序列(如 `\n`, `\t`)。对于一些特殊的非打印字符,可以使用 `CHR()` 函数生成对应的 ASCII 字符。例如: - 插入换行符: ```sql SELECT 'First line' || CHR(10) || 'Second line' AS multiline_text FROM DUAL; ``` - 插入制表符: ```sql SELECT 'Column1:' || CHR(9) || 'Value1' AS tabbed_output FROM DUAL; ``` 这些示例展示了如何利用 `CHR()` 来插入无法直接输入的控制字符[^2]。 #### 处理复杂字符串拼接与转义 当涉及大量复杂的字符串操作时,可能会遇到多种特殊字符组合。此时可以综合运用 `||` 和 `CHR()` 实现更灵活的功能。例如: ```sql SELECT 'The address is: ' || REPLACE('St. John\'s Road', '''', '''''') || CHR(10) || 'City: New York' AS formatted_address FROM DUAL; ``` 在此例子中,`REPLACE` 函数被用来替换原始字符串中的单引号以确保其不会破坏整个语句结构;而 `CHR(10)` 则引入了一个新行以便于阅读输出结果[^3]。 #### 嵌套 CONCAT 的情况下的转义应用 虽然推荐优先考虑性能更高的 `||` 方法,但在特定需求下仍需依赖 `CONCAT` 函数时也应注意适当加入必要的转义逻辑。比如下面这个例子展示的是如何在一个深层级嵌套调用里安全传递含有特殊符号的数据项: ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值