【Tip】解決like中無法匹配下劃線的問題
如果想檢索出欄位中包含下劃線“_”的內容,該如何書寫SQL語句呢?
之所以問這個問題,是因為在Oracle中下劃線在like中有著特殊的含義,它表示匹配任意一個字元。因此在查詢包含下劃線內容的時候需要“特殊關照”一下。
既然被問到了這個問題,簡單記錄一下兩種規避的方法,供參考。
1.建立實驗表,並初始化三條資料
sec@ora10g> create table t (x varchar2(10));
Table created.
sec@ora10g> insert into t values ('sec');
1 row created.
sec@ora10g> insert into t values ('secooler');
1 row created.
sec@ora10g> insert into t values ('sec_ooler');
1 row created.
sec@ora10g> commit;
Commit complete.
2.確認表T中的資料,其中包含兩條不帶下劃線的內容,一條帶下劃線的內容。
sec@ora10g> select * from t;
X
----------
sec
secooler
sec_ooler
3.使用like語句的錯誤查詢
sec@ora10g> select * from t where x like '%_%';
X
----------
sec
secooler
sec_ooler
為什麼錯誤?
因為在like語句中的下劃線的含義是“任意一個字元”,類似“%”代表匹配任意多個字元的。
4.正確的查詢方法
能想到的有如下兩種方法。
1)第一種方法使用escape轉義
sec@ora10g> select * from t where x like '%\_%' escape '\';
X
----------
sec_ooler
escape的內容可以任意,只要保證前後一致即可。
sec@ora10g> select * from t where x like '%|_%' escape '|';
X
----------
sec_ooler
sec@ora10g> select * from t where x like '%*_%' escape '*';
X
----------
sec_ooler
2)使用instr函式輔助判斷
使用instr函式判斷欄位中是否包含“_”,如果包含返回值是非零的,如果不包含則返回值是零。
sec@ora10g> select * from t where instr(x,'_')!=0;
X
----------
sec_ooler
3)
sec@ora10g> select ascii('_') from dual;
ASCII('_')
----------
95
5.小結
任何語言都存在需要“特殊關照”的情況,這需要具體問題具體分析,發現一個問題解決一個問題,不積跬步無以至千里。
Good luck.
secooler
09.12.07
-- The End --
之所以問這個問題,是因為在Oracle中下劃線在like中有著特殊的含義,它表示匹配任意一個字元。因此在查詢包含下劃線內容的時候需要“特殊關照”一下。
既然被問到了這個問題,簡單記錄一下兩種規避的方法,供參考。
1.建立實驗表,並初始化三條資料
sec@ora10g> create table t (x varchar2(10));
Table created.
sec@ora10g> insert into t values ('sec');
1 row created.
sec@ora10g> insert into t values ('secooler');
1 row created.
sec@ora10g> insert into t values ('sec_ooler');
1 row created.
sec@ora10g> commit;
Commit complete.
2.確認表T中的資料,其中包含兩條不帶下劃線的內容,一條帶下劃線的內容。
sec@ora10g> select * from t;
X
----------
sec
secooler
sec_ooler
3.使用like語句的錯誤查詢
sec@ora10g> select * from t where x like '%_%';
X
----------
sec
secooler
sec_ooler
為什麼錯誤?
因為在like語句中的下劃線的含義是“任意一個字元”,類似“%”代表匹配任意多個字元的。
4.正確的查詢方法
能想到的有如下兩種方法。
1)第一種方法使用escape轉義
sec@ora10g> select * from t where x like '%\_%' escape '\';
X
----------
sec_ooler
escape的內容可以任意,只要保證前後一致即可。
sec@ora10g> select * from t where x like '%|_%' escape '|';
X
----------
sec_ooler
sec@ora10g> select * from t where x like '%*_%' escape '*';
X
----------
sec_ooler
2)使用instr函式輔助判斷
使用instr函式判斷欄位中是否包含“_”,如果包含返回值是非零的,如果不包含則返回值是零。
sec@ora10g> select * from t where instr(x,'_')!=0;
X
----------
sec_ooler
3)
sec@ora10g> select ascii('_') from dual;
ASCII('_')
----------
95
5.小結
任何語言都存在需要“特殊關照”的情況,這需要具體問題具體分析,發現一個問題解決一個問題,不積跬步無以至千里。
Good luck.
secooler
09.12.07
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-621900/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 解決like中無法匹配下劃線的問題Oracle
- 解決oracle中not like效率問題Oracle
- Windows無法配置此無線連線這個問題的解決辦法Windows
- MySQL 中文 like 問題解決MySql
- 解決無法使用VI的問題
- 解決ubuntu下sublime無法輸入中文問題Ubuntu
- goland中npm無法使用的問題及解決方法GoLandNPM
- 解決:angular js模板中無法使用ueditor的問題AngularJS
- 解決EventBus中接收方法中無法更新UI的問題UI
- 解決Centos無法yum源的問題CentOS
- 手動下載 Chrome,解決 puppeteer 無法使用問題Chrome
- 解決 Homestead 國外映象無法下載問題
- Ubuntu下解決Eclipse無法輸入中文問題UbuntuEclipse
- 解決idea中無法識別主類的問題Idea
- IDEA中Lombok無法生效的問題及解決方法IdeaLombok
- gmail無法訪問問題解決--FGWAI
- 解決寶塔皮膚無法訪問的問題?
- Matlab解決線性規劃問題Matlab
- 解決ASM無法啟動問題ASM
- SaaS無法解決“關鍵”問題
- 解決XML下無效字元的問題XML字元
- 解決codeblocks無法除錯的問題BloC除錯
- AD9中元件無法顯示的問題解決元件
- windows無法配置此無線連線的解決辦法Windows
- 解決Windows下SVN上UUID不匹配問題WindowsUI
- 如何解決無線路由器無法上網的問題路由器
- 解決go get 下載github專案慢或無法下載的問題!GoGithub
- 解決mac系統下無法手動設定ip的問題Mac
- 解決下載的CHM檔案無法顯示網頁問題網頁
- 解決:在阻止快取的inspect模式下無法drawImage()的問題快取模式
- 解決split無法得到空字串問題字串
- Parallels Tools 無法安裝問題解決Parallel
- golang windows10下 go build 無法編譯 問題解決GolangWindowsUI編譯
- Linux下共享庫問題導致無法啟動SQLPLUS的問題解決LinuxSQL
- AD18無法模擬問題的解決
- 解決VisualStudio無法除錯的問題除錯
- 解決OBJC_CLASS_$_MBProgressHUD無法引用的問題OBJ
- 解決ASM磁碟組無法掛載的問題ASM