2013-06-18 43 views
0

我在Oracle Apex 4.2中構建報告。報表構建的表在其中一列中有多個值。查詢多值列上的條件

----------------------------------- 
| ID | NAME | PROJECT_ID | 
----------------------------------- 
| 1 | P1 | 23:45:56  | 
| 2 | P2 | 23   | 
| 3 | P3 | 45:65  | 
----------------------------------- 

我想建立一個查詢來檢索基於project_id的名字。

Select name from table where project_id = 23; 

這顯然將返回P2僅不過,我想建立一個查詢,如果我們尋找23

任何幫助非常感謝這將返回P1和P2。

回答

5

您可以像使用,而不是=的:

Select name from table where project_id LIKE '%23%'; 

如果你有一個常用的分隔符,如「:」在你的榜樣,你可以使用以下方法來排除像「123」的結果:

SELECT name FROM table WHERE ':' || project_id || ':' LIKE '%:23:%' 

通過將分隔符連接到字符串的前面和後面,您不必編寫多個條件:LIKE '23:%'或LIKE'%:23:%'或LIKE'%:23 '來處理列表中的第一個和最後一個數字。

+0

我真的很抱歉,但我不明白爲什麼人們投票回答這個問題。此查詢將返回project_id的名稱,如:23,123,230,231等等...... –

+0

根據示例數據,您不清楚數據是否有'123',您試圖避免。 23會一直以':'分隔嗎? –

+0

是的,數據範圍在1 - 50000之間。總是用冒號分隔。如果有單個實例,則沒有冒號。在第一個和最後一個符號之前,沒有冒號。 –

1

這是Apex的常見設計,因爲它內置支持冒號分隔的字符串(例如驅動穿梭控件和其他物品類型)。

我一般都採用這種模式:

Select name from table where INSTR(':'||project_id||':',':23:') > 0; 

附:這個專欄的名字很遺憾 - 我會稱之爲PROJECT_ID_LIST

+0

謝謝傑弗裏,穿梭機有時會是真正的痛苦。關於列命名約定,我同意你應該命名爲不同的名稱,但這只是一個例子。 –