如何返回具有字符串B的字符串A的结果,但不返回任何具有字符串B而没有字符串A的值

时间:2018-03-02 02:42:40

标签: sql amazon-redshift

我在Redshift工作时有一个跟踪参与位置的字段 - 该字段可以包含以下值:

FT,LC,PostLC,OC,Form,CW

并且可以真正拥有这些组合。我特别只希望看到那些是LC接触点。

这意味着它们必须包含LC字符串 - 如果我这样做:

' ilike'%LC%'我将获得不包含LC位置的结果,但包含PostLC位置。我只需要返回包含LC位置的值和其他值。

例如' FT,LC,PostLC,OC'会很好,但是' PostLC,OC,CW'是不可接受的。

如何将其转换为where子句中的SQL条件?

感谢

2 个答案:

答案 0 :(得分:1)

快速回答是你需要在你的思维中包含逗号和空格,以便(例如)like '%, LC%'有助于区分LC和PostLC。

demo

CREATE TABLE Table1
    (engagements varchar(100))
;

INSERT INTO Table1
    (engagements)
VALUES
    ('FT, LC, PostLC, OC, Form, CW')
  , ('PostLC, OC, CW')
;

查询1

select *
from table1
where engagements like '%, LC%'

<强> Results

|                  engagements |
|------------------------------|
| FT, LC, PostLC, OC, Form, CW |

然而,更难(接受)的答案是您应该更改数据模型,以便逗号分隔的字符串成为一个新表,每个新值都有行。

修改 另请注意,列表中的第一项没有前面的逗号。所以你的查询会变得有点复杂:

select *
from table1
where engagements like '%, LC%' 
or  engagements like 'LC ,%'

答案 1 :(得分:1)

您可以使用like

where ',' || field || ',' like '%,LC,%'