where子句没有在Postgres查询中选择正确的行

时间:2017-08-31 03:41:10

标签: postgresql

所以我有一个查询,我试图在citalopram列或celexa列中获取包含单词medication或单词generic的行。

首先我尝试了:

where    
    (   medication     ilike '%citalopram%'    or 
        generic        ilike '%citalopram%'    or 
        medication     ilike '%celexa%'        or 
        generic        ilike '%celexa%')

所有人都找到了,但是,它还选择了包含药物escitalopram的行。所以我更改了查询,使其如下所示:

where    
    (   medication     ilike '%citalopram%'    or 
        generic        ilike '%citalopram%'    or 
        medication     ilike '%celexa%'        or 
        generic        ilike '%celexa%')         and 
        medication not ilike '%escitalopram%'    and 
        generic    not ilike '%escitalopram%'

现在,确实它消除了包含escitalopram的行,但现在有时会忽略具有以下内容的行:

  • 药物= CeleXa 40mg oral tablet,通用= null
  • 药物= citalopram 40mg oral tablet,通用= null

不确定为什么这可能是问题所在。任何建议将不胜感激!

1 个答案:

答案 0 :(得分:0)

为什么不:

where  
concat(' ',medication,' ',generic) ilike '% citalopram%' 
  or 
concat(' ',medication,' ',generic) ilike '% celexa%'

在列之前放置空格,所以如果列值以单词开头,它仍然会有空格