比较oracle sql中的确切字符串

时间:2019-09-18 14:22:45

标签: sql oracle

我有一列,其中用':'冒号分隔不同的值。我想匹配列中的确切字符串。 假设表是临时表,列名是sample_col。值的顺序也可以更改。

sr_no|sample_col

1 |    'Sample-ABC'
2 |   'Sample-ABC-123'
3 |    'Sample-ABC-123:XYZ'
4 |    'Sample-ABC-123:Sample-ABC'
5 |    'XYZ:Sample-ABC'

所以

1)要求查询来搜索具有值'Sample-ABC'的记录,然后是3条记录(即sr_no    1,4,5)应该通过查询

2)要求查询来搜索具有值'Sample-ABC-123'的记录,然后是3条记录(即sr_no    2,3,4)应该提取。

3)对于具有“ Sample-ABC-123”值但不具有“ Sample-ABC”的记录,要求解决方案,然后应提取2条记录(即sr_no 2,3)。

我尝试使用regexp_like,instr,like等选项获取输出,但失败了。谁能帮助我进行排序。

下面是我尝试获取具有“ Sample-ABC”记录的记录的SQL查询:

select * from temp
where instr(sample_col,'Sample-ABC') > 1
and sample_col not like '%Sample-ABC-123%'; --this exclude 'Sample-ABC-123:Sample-ABC' record from

select * from temp
where sample_col not like '%Sample-ABC%'; --this will include 'Sample-ABC-123' records as well.


select * from temp
where regexp_like(sample_col,'Sample-ABC'); --this will include 'Sample-ABC-123' records as well.

我需要查询,该查询将提供所有

的输出

1 个答案:

答案 0 :(得分:1)

您可能已经知道这是一种错误的数据格式,应该使用更合适的结构来存储多个值,例如表,嵌套表,JSON,XML或其他内容。

也就是说,您可以通过添加定界符进行比较来完成所需的工作:

where ':' || sample_col || ':' like '%:Sample-ABC:%'

这将找到完全匹配的内容。