如何选择仅以特定前缀开头的字符串

Posted

技术标签:

【中文标题】如何选择仅以特定前缀开头的字符串【英文标题】: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 .... 【参考方案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 版本和平台是什么?

以上是关于如何选择仅以特定前缀开头的字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在执行复制到命令以选择具有固定前缀的文件时提供正则表达式模式?

如何强制 Notepad++ 仅以 UTF-8 打开文件?

如何选择以公共标签开头的所有列

如何用批处理找出文件名有特定前缀的文件并删除文件名的前缀及后面的日期

如何检查字符串是不是以多个前缀之一开头?

正则表达式:如何匹配不以前缀列表开头的子字符串