我有一列,其中用':'冒号分隔不同的值。我想匹配列中的确切字符串。 假设表是临时表,列名是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.
我需要查询,该查询将提供所有
的输出答案 0 :(得分:1)
您可能已经知道这是一种错误的数据格式,应该使用更合适的结构来存储多个值,例如表,嵌套表,JSON,XML或其他内容。
也就是说,您可以通过添加定界符进行比较来完成所需的工作:
where ':' || sample_col || ':' like '%:Sample-ABC:%'
这将找到完全匹配的内容。