Oracle在varchar

时间:2015-07-08 10:14:11

标签: sql oracle split

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

我需要在String中找到一个确切的值(参见输出)。

这是我的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/

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

  

我也发现了关于使用拆分的问题,我无法整合

     

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

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

无需拆分字符串,按以下方式使用 LIKE ,只考虑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>

答案 1 :(得分:1)

了解您的Oracle数据库版本是否支持REGEXP_LIKE(类似于LIKE)。 你可以写一个正则表达式,这样的

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

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

另见regular expression syntax