这是与答案SQL placeholder in WHERE IN issue, inserted strings fail使用CSV的SQL INSTR()。需要精确匹配,而不是部分
快速背景跟进的问题:我们有一个使用的占位符值接受一个字符串,它是一个独特的标签/ ID的SQL查询。通常,这只是一个标签,但我们需要为多个标签使用csv字符串,并返回组合结果。
在我们从供应商处获得答案,他们建议使用INSTR
功能,鼻翼:
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字符串或使它看起来完全匹配?
+1,正是我在想什么! – 2010-04-09 12:34:42
+1,我们最终使用了一个小小的变化,主要是因为我们的SQL不支持||。 (出于某种原因)。我们最终使用了'INSTR(','+?+',',','+ tag +',')'这似乎完全按照计划工作。谢谢! – 2010-04-13 04:02:14