这是与SQL placeholder in WHERE IN issue, inserted strings fail
的答案相关的后续问题快速背景:我们有一个SQL查询,它使用占位符值来接受字符串,该字符串表示唯一标记/ ID。通常,这只是一个标记,但我们需要能够将csv字符串用于多个标记,并返回合并结果。
在我们从供应商处收到的答复中,他们建议使用INSTR
函数,ala:
select *
from pitotal
where tag IN (SELECT tag from pipoint WHERE INSTR(?, tag) <> 0) and time between 'y' and 't'
这种方法在99%的情况下完美运行,问题是tag
也是CSV字符串的2部分的子集。例如,占位符值为:'northdom,southdom,eastdom,westdom'
可能的标签包括:
north
或northdom
由于north
是northdom
的子集,会发生两种标记,而不仅仅是northdom
,这实际上就是我们想要的。
我对SQL不强,所以我无法弄清楚如何将其设置为精确,或者拆分csv字符串,所以请帮助。
有没有办法拆分csv字符串或让它找到完全匹配?
答案 0 :(得分:2)
如果你使用这样的查询它应该工作。假设您用逗号括起标记。
select *
from pitotal
where tag IN (SELECT tag from pipoint WHERE INSTR(?, ',' || tag || ',') <> 0) and time between 'y' and 't'
基本上......我们不会搜索north
,而是搜索,north,
。而不是在northdom,southdom,eastdom,westdom
中搜索,我们将搜索,northdom,southdom,eastdom,westdom,