Oracle 在 varchar 中查找值

Oracle find values in varchar

是否有机会使用 oracle 在 varchar 中找到一个准确的值 sql?

我需要在字符串中找到一个准确的值(查看输出)。

这是我的 sql 输出:

Rights (varchar)
-----
#1  ( ID IN ( 1560 , 1760 , 1860 , 20200 , 3530, 16000 ) ) 
#2  ( ID IN ( 1600 , 20000 , 100000 ) ) 

我想过滤例如字符串 16001660.

在这种情况下,只应显示 #2

我试过 and table1.rights like '%1600%' 但这当然行不通,因为它告诉我 #1 以及哪个是错误的。

我还发现了这个关于使用我无法集成的拆分

http://lalitkumarb.com/2014/12/02/split-comma-delimited-string-into-rows-using-oracle-sql/

有什么想法吗?

查看你的Oracle数据库版本是否支持REGEXP_LIKE(类似于LIKE)。 在里面你可以写一个正则表达式,something like this,

SELECT * FROM table1 WHERE REGEXP_LIKE (rights, ' (,|[:blank:]|\()16(00|60)(,|[:blank:]|\))');

编辑:我只是改进了评论后的正则表达式。 即使缺少 space,它也能正常工作。要搜索任何其他值,您只需 更改表达式中间 的值部分。

也看到了regular expression syntax

I also found this about using split which I cant integrate

http://lalitkumarb.com/2014/12/02/split-comma-delimited-string-into-rows-using-oracle-sql/

很高兴看到有人关注我的博客和文章:-)

无需拆分字符串,按以下方式使用 LIKE 只会考虑 space before/after 1600 而不会其他角色:

SQL> WITH DATA(str) AS(
  2  SELECT '#1  ( ID IN ( 1560 , 1760 , 1860 , 20200 , 3530, 16000 ) )' FROM dual UNION ALL
  3  SELECT '#2  ( ID IN ( 1600 , 20000 , 100000 ) )' FROM DUAL
  4  )
  5  SELECT * FROM DATA
  6  WHERE str LIKE '% 1600 %';

STR
----------------------------------------------------------
#2  ( ID IN ( 1600 , 20000 , 100000 ) )

SQL>