我正在尝试在REGEXP_SUBSTR()函数约束的表中搜索不同字符串的列表。
我下面的代码在做什么,它将删除包含“ PO:”和“ HF:”的所有内容,并在表中搜索一个数字(例如:12345)。我想要一种快速的方法来搜索多个数字(例如12345、12346、12347 ...),而不必每次都对LIKE使用REGEXP_SUBSTR()函数。
我的代码:
mvn spring-boot:run
我尝试过“ IN”
SELECT column_1, column_2, column_3
FROM table_1
WHERE column_1 NOT LIKE 'PO:%'
AND column_1 NOT LIKE 'HF:%'
AND REGEXP_SUBSTR(column_1, '[0-9]+',1,1) LIKE '%12345%'
;
但这不起作用。
我是新来的,因此非常感谢您的帮助/指导!
答案 0 :(得分:1)
regexp_like()
:
SELECT column_1, column_2, column_3
FROM table_1
WHERE column_1 NOT LIKE 'PO:%' AND
column_1 NOT LIKE 'HF:%' AND
regexp_like(column_1, '12345|12346|12347')
答案 1 :(得分:0)
这是您要寻找的吗?
SELECT
*
FROM
(
SELECT
'PO123455HF' AS str
FROM
dual
UNION
SELECT
'PO124455HF' AS str
FROM
dual
UNION
SELECT
'PO1236855HF' AS str
FROM
dual
UNION
SELECT
'PO1243545HF' AS str
FROM
dual
UNION
SELECT
'POHF' AS str
FROM
dual
)
WHERE
REGEXP_LIKE ( str,
'[0-9]' );
输出-
PO123455HF
PO1236855HF
PO1243545HF
PO124455HF
答案 2 :(得分:0)
已经有一个帖子可以回答这个问题。您正在寻找通配符联接。
Joining tables with LIKE (SQL)
select *
from tableone
join tabletwo on tableone.pizzaone like ('%' || tabletwo.pizzatwo || '%')
这是一个使用t-sql的肮脏示例。
create table #temp1
(col1 varchar(15))
insert into #temp1 values
('abcde') --contains 'ab'
,('bcde') --does not contain 'ab' or 'ef'
,('defgh') --contains 'ef'
select
a.col1
from #temp1 a
inner join
(
select 'ab' as col2
union
select 'ef' as col2
) b
on a.col1 like '%' + b.col2 + '%'
我们在这里正在看两个表。第一个表是您的主表。第二个表(在这种情况下,我们只是看一个并集)包含您要匹配的值。您将像往常一样将两列的第一个表连接到第二个表。但是,您可以将=
符号替换为like语句。根据您使用的SQL风格,将使用适当的concat
函数将搜索字符串包装在%
中。在Oracle中,您将在SQL Server中使用管道以及加号。