【问题标题】:How to select the strings that only begin with specific prefixes如何选择仅以特定前缀开头的字符串
【发布时间】:2021-08-30 09:44:56
【问题描述】:

我正在尝试过滤我的查询以仅获取以这些前缀开头的字符串:

**AC / AY / AN / AZ / IR **

为此,我尝试了这个 SQL 查询:

select PN from MyTestTable where PN like 'AC%'  AND  PN like 'AY%' AND  PN like 'AN%' AND  PN like 'AZ%' AND  PN like 'IR %' ;

有没有办法使用列表或其他方式进行过滤?

【问题讨论】:

  • 不是想要的答案,但ANDs 应该是ORs
  • WHERE condition1 OR condition2 OR condition3 ....

标签: sql db2


【解决方案1】:

您可以使用以下查询:

SELECT PN FROM MyTestTable WHERE SUBSTR(PN,1,2) IN ('AC','AY','AN','AZ','IR')

我希望这对你有用。

【讨论】:

    【解决方案2】:

    创建临时表并使用连接:

    DECLARE @Pref TABLE (val nvarchar(20))
    INSERT INTO @Pref
    VALUES
    ('AC'),
    ('AY'),
    ('AN'),
    ('AZ'),
    ('IR')
    
    SELECT t.PN 
    FROM MyTestTable AS t
    INNER JOIN @Pref p ON t.PN LIKE p.val+'%'
    

    【讨论】:

      【解决方案3】:

      您可以将like 与一堆or 条件一起使用。或者使用regexp_like():

      select PN
      from MyTestTable
      where regexp_like(PN, '^(AC|AY|AN|AZ|IR )')
      

      注意:这包括'IR' 之后的空格,这似乎是问题的一部分。如果不需要,也可以使用:

      where left(PN, 2) in ('AC', 'AY', 'AN', 'AZ', 'IR')
      

      【讨论】:

      • regexp_like 是 db2 中的有效正则表达式吗?因为使用您提供的查询时出现错误:[42601] [- 104] [SQL0104] 语法元素 不正确。可能的元素: = ! => = ¬ ¬ = IN.
      • 你的 db2 版本和平台是什么?
      最近更新 更多