Oracle轉義字元

2021-04-26 15:46:56 字數 4282 閱讀 9684

sql> select * from test;

test

--------------------

sdd_kk

d'ddfsfsa

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'ddfsfsa

dffa%asfs

12345

1%2345

1%54321

2%54321

%%54321

a&btesttest

test

--------------------

test&test

test&test

已選擇13行。

sql> commit;

提交完成。

sql> select * from test;

test

--------------------

sdd_kk

d'ddfsfsa

dffa%asfs

12345

1%2345

1%54321

2%54321

%%54321

a&btesttest

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'ddfsfsa

dffa%asfs

12345

1%2345

1%54321

2%54321

%%54321

a&btesttest

test

--------------------

test&test

test&test

test%test

test_test

test'test

已選擇16行。

連線符『||』導致了新一輪的轉義:連線符號『||』左右的單引號沒有任何的關係,除非『||』是作為字串的一部分(這在動態sql中很常見)。

sql> select 'oracle'||'''' from dual;

'oracle'||''

----------

oracle'

個人理解,'oracle'||'''' 後面的「''''」應該認為是乙個字串(即前後單引號,中間是「''」串,而中間又是密集單引號,因此第乙個為轉義功能)

sql> select 'oracle''''' from dual;

'oracle'''''

------------

oracle''

對於第乙個,前兩個單引號配對,後面四個單引號按照上面的第一條原則分配,既:select 'oracle'||'''' from dual;

對於第二個,由於第二個單引號後面存在單引號,所以就不與第乙個配對,而是充當了轉義的角色。既:select 'oracle''''' from dual;

oracle 預設轉義字元 Oracle轉義字元

1 oracle 特殊字元 轉義 在plsql裡邊執行 update userinfo set pageurl myjsp?page 1 pagesize 10 where id test 1 update userinfo set pageurl myjsp?page 1 pagesize 10 ...

oracle 預設轉義字元 oracle轉義字元

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 te...

Oracle轉義字元

1 oracle 特殊字元 轉義 環境 oracle 9i plsql 在plsql裡邊執行 update userinfo set pageurl myjsp?page 1 pagesize 10 where id test 這條sql語句往資料庫的pageurl欄位放進去了乙個url位址,但是執...