gpt4 book ai didi

sql - 在 Oracle IN 子句中使用 LIKE

转载 作者:行者123 更新时间:2023-12-03 14:32:11 25 4
gpt4 key购买 nike

我知道我可以编写一个查询,该查询将返回给定列中包含任意数量值的所有行,如下所示:

Select * from tbl where my_col in (val1, val2, val3,... valn)

但如果 val1例如,可以出现在 my_col 中的任何位置,其数据类型为 varchar(300),我可能会写:
select * from tbl where my_col LIKE '%val1%'

有没有办法结合这两种技术。我需要搜索大约 30 个可能的值,这些值可能出现在列的自由格式文本中的任何位置。

以下列方式组合这两个语句似乎不起作用:
select * from tbl where my_col LIKE ('%val1%', '%val2%', 'val3%',....) 

select * from tbl where my_col in ('%val1%', '%val2%', 'val3%',....)

最佳答案

这里有用的是 a LIKE ANY predicate as is available in PostgreSQL

SELECT * 
FROM tbl
WHERE my_col LIKE ANY (ARRAY['%val1%', '%val2%', '%val3%', ...])
不幸的是,该语法在 Oracle 中不可用。您可以使用 OR 扩展量化比较谓词, 然而:
SELECT * 
FROM tbl
WHERE my_col LIKE '%val1%' OR my_col LIKE '%val2%' OR my_col LIKE '%val3%', ...
或者,使用 EXISTS 创建半连接谓词和 auxiliary array data structure (see this question for details) :
SELECT *
FROM tbl t
WHERE EXISTS (
SELECT 1
-- Alternatively, store those values in a temp table:
FROM TABLE (sys.ora_mining_varchar2_nt('%val1%', '%val2%', '%val3%'/*, ...*/))
WHERE t.my_col LIKE column_value
)
对于真正的全文搜索,您可能需要查看 Oracle Text: http://www.oracle.com/technetwork/database/enterprise-edition/index-098492.html

关于sql - 在 Oracle IN 子句中使用 LIKE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6074201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com