是否有机会使用oracle sql在varchar中找到确切的值?
我需要在String中找到一个确切的值(参见输出)。
这是我的sql输出:
Rights (varchar)
-----
#1 ( ID IN ( 1560 , 1760 , 1860 , 20200 , 3530, 16000 ) )
#2 ( ID IN ( 1600 , 20000 , 100000 ) )
我想过滤字符串1600
和1660
。
在这种情况下,只应显示#2
。
我尝试了and table1.rights like '%1600%'
这当然不起作用,因为它向我显示#1
这也是错误的。
我也发现了关于使用拆分的问题,我无法整合
http://lalitkumarb.com/2014/12/02/split-comma-delimited-string-into-rows-using-oracle-sql/
有什么想法吗?
答案 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表达式。 即使缺少一些空间也能正常工作。要搜索任何其他值,您只需要更改表达式中间的值部分。