在字段里查找'%',涉及到Oracle的轉義字符,現總結如下:
專注于為中小企業提供網站建設、網站制作服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業安化免費做網站提供優質的服務。我們立足成都,凝聚了一批互聯網行業人才,有力地推動了上1000家企業的穩健成長,幫助中小企業通過網站建設實現規模擴充和轉變。
SQL select * from test;
TEST
--------------------
sdd_kk
d'd
dfsfsa
dffa%asfs
12345
1%2345
1%54321
2%54321
%%54321
AB
已選擇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
--------------------
AB
'''的轉義:
SQL select * from test where test like '%''%';
TEST
--------------------
d'd
特殊符號的數據的插入
SQL insert into test values('testtest');
輸入 test 的值: test
原值 1: insert into test values('testtest')
新值 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('testtest');
已創建 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
AB
testtest
TEST
--------------------
testtest
testtest
已選擇13行。
SQL commit;
提交完成。
SQL select * from test;
TEST
--------------------
sdd_kk
d'd
dfsfsa
dffa%asfs
12345
1%2345
1%54321
2%54321
%%54321
AB
testtest
TEST
--------------------
testtest
testtest
已選擇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
AB
testtest
TEST
--------------------
testtest
testtest
test%test
test_test
test'test
已選擇16行。
一、符號的處理方案
1、在前面加上語句set define off
首先要理解是做什么的,這個符合在Oracle中表示替代變量,執行時會提示用戶輸入,然后以及后面的字符會替換為用戶輸入的字符。
set define off的作用是關閉替代變量功能。當然你還可以把替代變量改為其它符號,比如改為*號,輸入這個命令:set define *
2、在SQL語句中將分拆并替換成chr(38)
38是的ASCII碼,實例sql
3、分拆出號,這也是最簡單直接的方法
二、符號'的處理方案
1、直接轉義
2、分拆轉義
3、分拆并替換成chr(39)
1、”“ 轉義
這個是Oracle里面用來識別自定義變量的設置,現在我們在SQL*PLUS下將其關閉:
SQL Set define OFF;
然后再次執行導入腳本,OK!問題搞定。
注意:如果是在TOAD中執行,建議在每一個要導入的腳本第一行加上前面那句關閉define的話,否則當你導入第二個含有特殊字符的腳本的時候,又會出錯。
如果是在SQL*PLUS中執行,則只需要設置一次define OFF,后面就可以連續導入了。直到你重新設置define ON為止。
·方法二:在SQL語句中將''替換成chr(38),因為chr(38)是‘’的ASCII碼
SQL Select 'Tom' || chr(38) || 'Jerry' from dual;
·方法三:分拆原來的字符串
SQL Select 'Tom' || '' || 'Jerry' from dual;
我們可以看到,方法一最為簡便,而且效率也最高。方法二因為有一個調用函數的過程,所以性能稍差。方法三需要兩次連接字符串,效率最差!
2、” ' “ 轉義
·方法一:使用轉義字符
SQL Select 'test' || '''' from dual;
第三個'才是我們真正的內容
·方法二:同樣是使用轉義字符,只不過方式不同而已
SQL Select 'test ''' from dual;
注意:這里的第二個,第三個'就是我們上面方法一中提到的轉義符和真正的內容
額……比方說……像下面這個:create or replace function fun_get_bookinfo(key_words varchar2(10)) returns table(……)return table (select * from v_book_info where bookname like '/_%' key_words '/');like后面與字符串匹配,但是要用到傳進來的參數直接引號括起來不就不能傳參了么,是應該上面那樣寫么……
begin
dbms_output.put_line('''abcd''');
end;
oracle中字符串中,單引號用兩個單引代表一個,也就是說單引號本身是轉義符
分享題目:oracle怎么轉譯 oracle 轉意字符
URL網址:http://m.2m8n56k.cn/article48/hpcjhp.html
成都網站建設公司_創新互聯,為您提供定制開發、虛擬主機、網站導航、用戶體驗、Google、網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯