Oracle-like多条件过滤以及andor⽤法
1、select * from file where DOC_SUBJECT not like '%测试%' and (DOC_STATUS like '待审' or DOC_STATUS like '结束' ) #过滤测试数据,并保留待审和结束数据。
<=>
regexp likeselect * 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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论