這是與答案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