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

问题描述 投票:0回答:2

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

FT,LC,PostLC,OC,Form,CW

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

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

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

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

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

谢谢

sql amazon-redshift
2个回答
1
投票

你可以使用like

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

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 ,%'
© www.soinside.com 2019 - 2024. All rights reserved.