2010-07-15 75 views
0

我的員工表中有一列MetaKeys。它包含如下所示像一個值:在Oracle列中搜索特定值

MetaKeys="DocType=1***SubDocType=2***MinValue=123" 

如何查詢我的表,然後從MetaKeys列取只是SubDocType價值?

Select * from employee where Metakeys contains SubDocType=2 
+0

在本專欄中您有3位信息。如果你發現自己需要編寫這種查詢,可能有時間將它們分開? – 2010-07-15 18:18:53

回答

0

我同意Martin Smith的看法,您可能需要將這些信息標準化。話雖這麼說,這裏是一個可能的解決方案,它可以爲你工作:

SELECT SUBSTR (expr, INSTR (expr, '=') + 1) subdoctypeval 
    FROM (SELECT REGEXP_SUBSTR ('DocType=1***SubDocType=2***MinValue=123', 
           'SubDocType=[^*]+', 
           1, 
           1) 
        expr 
      FROM DUAL) 
0
SELECT * FROM employee WHERE Metakeys LIKE '%SubDocType=2%' 

這不是在做查詢,因爲你不會得到任何好處索引的最有效的方式,但它的作品。

0

做的是固定設計,使有沒有在EMPLOYEE表中的metakeys列,而是一個EMPLOYEE_METAKEY表中的正確的事情:

CREATE TABLE EMPLOYEE_KEY_VALUES 
(EMP_ID   number, 
EMP_METAKEY  VARCHAR2(100), 
EMP_METAVALUE VARCHAR2(1000), 
constraint EMPLOYEE_METAKEYS_PK primary key (EMP_ID, EMP_METAKEY) using index, 
constraint EMPLOYEE_METAKEYS_FK01 foreign key (EMP_ID) 
    references EMPLOYEE (EMP_ID) on delete cascade 
); 

這樣的設計不會有通過僱員表做metakey搜索時拖網的性能問題,你將不必寫正則表達式尋找與多個鍵值對員工時。