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