当前位置: 代码迷 >> PB >> 过滤条件表达式,该如何解决
  详细解决方案

过滤条件表达式,该如何解决

热度:18   发布时间:2016-04-29 09:02:01.0
过滤条件表达式
ds_equip.setfilter( "range LIKE '%AB%' ")
ds_equip.filter( )
ds_equip.retrieve()

如果我想检索range为AB和BC的项表达式应该怎么写?下面的好像不对
ds_criterion.setfilter( "range LIKE '%珠宝%' and range LIKE '%贵金属%' ")
ds_criterion.filter( )
ds_criterion.retrieve()

------解决方案--------------------
在表达式里面使用like要加括号,否则filter会返回错误的,具体原因查一下PB运算符的优先级就知道了,
另外,也可以改成pos函数来实现,可以不加括号的,呵呵~~
ds_criterion.setfilter( "(range LIKE '%珠宝%') and (range LIKE '%贵金属%' )") 
ds_criterion.filter( ) 
ds_criterion.retrieve()
------解决方案--------------------
一、确定是要加括号的问题,你看一下setfilter的返回值就是了!
二、你的需求是什么,是要过滤包括含贵金属的珠宝的还是珠宝或是贵金属;

探讨
。。。不是吧,我没加括号也很正常咧,加了的话检索不出数据
ds_criterion.setfilter( "range LIKE '%珠宝%' and range LIKE '%贵金属%' ")
……
ds_criterion.setfilter( "range LIKE '%珠宝%' or range LIKE '%贵金属%' ")
……
另外用上面两种检索出来的都是全部数据,过滤条件好像没生效
ds_criterion.setfilter( "range LIKE '%珠宝%'")
……
ds_criterion.setfilter( "range LIKE '%珠宝%'")
……
这种单一的条件就没什么问题


------解决方案--------------------
这是入门级的问题,不存在会出错的,你加个括号就知道了!
一、过滤包括含贵金属的珠宝
ds_criterion.setfilter( "(range LIKE '%珠宝%') and (range LIKE '%贵金属%') ") 

二、过滤珠宝或是贵金属;
ds_criterion.setfilter( "(range LIKE '%珠宝%') or(range LIKE '%贵金属%') ") 

几天前就发了信息要你加括号,为什么不加呢?


------解决方案--------------------
ds_criterion.filter( ) 
ds_criterion.retrieve()

filter()之后,不用运行retrieve(),,不然就有重新检索一次全部数据了。
  相关解决方案