【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
- Windows無法配置此無線連線這個問題的解決辦法Windows
- MySQL 中文 like 問題解決MySql
- 解決無法使用VI的問題
- IDEA中Lombok無法生效的問題及解決方法IdeaLombok
- 解決idea中無法識別主類的問題Idea
- goland中npm無法使用的問題及解決方法GoLandNPM
- 解決codeblocks無法除錯的問題BloC除錯
- 解決Centos無法yum源的問題CentOS
- Matlab解決線性規劃問題Matlab
- 手動下載 Chrome,解決 puppeteer 無法使用問題Chrome
- SpringBoot 2.0中SpringWebContext 找不到無法使用的問題解決Spring BootWebContext
- 解決ASM無法啟動問題ASM
- Laradock 下建立 storage:link 軟連線資源無法訪問的解決辦法
- 解決 raw.githubusercontent.com 無法訪問的問題Github
- 解決寶塔皮膚無法訪問的問題?
- 解決go get 下載github專案慢或無法下載的問題!GoGithub
- Ubuntu18.04中解決emacs無法輸入中文的問題UbuntuMac
- AD9中元件無法顯示的問題解決元件
- Parallels Tools 無法安裝問題解決Parallel
- 解決split無法得到空字串問題字串
- 救命!!!jenkins 中自動化測試中遇到無法解決的問題Jenkins
- AD18無法模擬問題的解決
- golang windows10下 go build 無法編譯 問題解決GolangWindowsUI編譯
- 關於Quartus的start按鈕灰色無法下載的問題的解決
- 解決drf_yasg中的SwaggerAPI無法正確分組問題SwaggerAPI
- 解決虛擬網路卡無法連線到 Internet 問題(之一)
- 曲線救國,解決spring-boot2.0.6中webflux無法獲得請求IP的問題SpringbootWebUX
- 從根本解決jenkins無法下載外掛ssl證書問題Jenkins
- 解決vscode安裝後無法啟動的問題VSCode
- 記錄一次無法很好解決的問題
- 解決 Python 指令碼無法生成結果的問題Python指令碼
- WPF + Winform 解決管理員許可權下無法拖放檔案的問題ORM
- 關於Linux下Texlive無法找到已安裝字型的問題與解決Linux
- IDEA無法連線docker中的資料庫的問題IdeaDocker資料庫
- 解決webpack不能匹配post請求的問題Web
- Xshell連線Linux慢問題解決辦法Linux
- WiFi無法連線?解決macOS Big Sur / Mojave / Catalina上的Wi-Fi問題WiFiMac
- [linux]解決wayland協議下 google-chrome 無法輸入中文問題Linux協議GoChrome