tpu*_*nen 4 sql sql-server oracle
我需要选择一个字段以几个不同前缀之一开头的行:
select * from table
where field like 'ab%'
or field like 'cd%'
or field like "ef%"
or...
Run Code Online (Sandbox Code Playgroud)
在Oracle或SQL Server中使用SQL执行此操作的最佳方法是什么?我正在寻找类似以下语句(不正确)的内容:
select * from table where field like in ('ab%', 'cd%', 'ef%', ...)
Run Code Online (Sandbox Code Playgroud)
要么
select * from table where field like in (select foo from bar)
Run Code Online (Sandbox Code Playgroud)
编辑:我想看看如何通过在一个SELECT语句中给出所有前缀,将所有前缀存储在帮助程序表中来完成此操作.
前缀的长度不固定.
Lie*_*ers 16
将前缀表与实际表连接在一起可以在SQL Server和Oracle中使用.
DECLARE @Table TABLE (field VARCHAR(32))
DECLARE @Prefixes TABLE (prefix VARCHAR(32))
INSERT INTO @Table VALUES ('ABC')
INSERT INTO @Table VALUES ('DEF')
INSERT INTO @Table VALUES ('ABDEF')
INSERT INTO @Table VALUES ('DEFAB')
INSERT INTO @Table VALUES ('EFABD')
INSERT INTO @Prefixes VALUES ('AB%')
INSERT INTO @Prefixes VALUES ('DE%')
SELECT t.*
FROM @Table t
INNER JOIN @Prefixes pf ON t.field LIKE pf.prefix
Run Code Online (Sandbox Code Playgroud)
你可以尝试正则表达式
SELECT * from table where REGEXP_LIKE ( field, '^(ab|cd|ef)' );
Run Code Online (Sandbox Code Playgroud)
如果你的前缀总是两个字符,你不能只使用SUBSTRING()函数来获取"field"的前两个字符,然后查看它是否在前缀列表中?
select * from table
where SUBSTRING(field, 1, 2) IN (prefix1, prefix2, prefix3...)
Run Code Online (Sandbox Code Playgroud)
如果不是性能,这在简单性方面将是"最好的".在性能方面,您可以创建一个索引虚拟列,从"字段"生成前缀,然后使用谓词中的虚拟列.