2012-07-09 99 views
0

我用這個由LocState篩選記錄: (美國作爲管道分隔值通過如下圖所示,但將是一個參數)MySQL的WHERE子句建設問題

INSTR(CONCAT('|','TX|OH','|'),e.LocState) > 0 

但是...我怎樣才能使它的東西,這樣的工作?:

INSTR(CONCAT('|','AO|WH15','|'),e.ProgramCode) > 0 

這也導致了的程序代碼==「WH1」匹配。

POSITION(e.ProgramCode IN CONCAT('|','AO|WH15','|')) > 0 

也不管用。

回答

2

比方說,你有數據記錄是這樣的:

ID ProgramCode 
1  WH1 
2  WH15 

而且要篩選匹配WH1的記錄。如果您使用此查詢:

SELECT * 
FROM table 
WHERE ProgramCode INSTR(CONCAT('|','AO|WH15','|'),e.ProgramCode) > 0 

你基本上說:

選擇記錄,其中的程序代碼是在下面的字符串:'|A0|WH15|'

而且,由於'WH1''WH15'你會得到誤報。

你會使用WHERE IN結構,這樣會更好:

SELECT * 
FROM table 
WHERE ProgramCode IN ('A0', 'WH15'); 

這意味着:

選擇記錄,其中的程序代碼(在全部)是在下面的一組字符串: 'A0', 'WH15'

如果您的過濾條件作爲管道分隔的字符串傳遞,您需要先解析它您可以爲參數IN設置適當的數據集。

您可能也有興趣使用regular expressions,因爲MySQL支持它們。