Oracle-like 多條件過濾以及and or用法


1、select * from  file  where DOC_SUBJECT  not like '%測試%' and (DOC_STATUS like '待審' or DOC_STATUS like '結束' )  #過濾測試數據,並保留待審和結束數據。
<=>
select * from  LEAP.HMDW_DW_CZDS_YXHD_NEW  where DOC_SUBJECT  not like '%測試%' and DOC_STATUS not like '廢棄' and DOC_STATUS not like '駁回' and DOC_STATUS not like '草稿'    #比較笨,而且,DOC_STATUS值有新增就會導致錯誤。

<=> select * from  file  where DOC_SUBJECT  not like '%測試%' and regexp_like(DOC_STATUS,'(待審|結束)')

PS:
(1)DOC_STATUS數值有:待審、結束、草稿、廢棄、駁回。

(2)oracle 字段like多個條件(or關系)

寫oracle sql時有時候會有 and (字段 like ‘匹配串1’or 字段 like ‘匹配串2’or ...)這樣的情況出現,下面提供一個簡潔點的解決方案--

<=>

and REGEXP_LIKE(字段, '(匹配串1|匹配串2|...)') //全模糊匹配      等價於上一行,行的通

and REGEXP_LIKE(字段, '^(匹配串1|匹配串2|...)') ";//右模糊匹配   

and REGEXP_LIKE(字段, '(匹配串1|匹配串2|...)$') ";//左模糊匹配

 

2、and優先級大於or;or加括號則優先執行or后執行and;所以查詢結果不同。舉例:

數據庫存在數據:

FirstName LastName  /*行名稱*/

Thomas Carter

William Carter

Thomas King

 

執行:SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William') AND LastName='Carter'

 

會得到 lastname 必須為carter ,firstname 為 thomas 或者 william的人
thomas carter
william carter
執行:SELECT * FROM Persons WHERE FirstName='Thomas' OR FirstName='William' AND LastName='Carter'

<=>SELECT * FROM Persons WHERE (FirstName='Thomas') OR (FirstName='William' AND LastName='Carter')

 

可以得到 william carter 或者 firstname 為ithomas lastname 不一定是 carter的人 比如:
thomas carter
william carter
thomas king

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM