我的員工表中有一列MetaKeys。它包含如下所示像一個值:在Oracle列中搜索特定值
MetaKeys="DocType=1***SubDocType=2***MinValue=123"
如何查詢我的表,然後從MetaKeys列取只是SubDocType價值?
Select * from employee where Metakeys contains SubDocType=2
我的員工表中有一列MetaKeys。它包含如下所示像一個值:在Oracle列中搜索特定值
MetaKeys="DocType=1***SubDocType=2***MinValue=123"
如何查詢我的表,然後從MetaKeys列取只是SubDocType價值?
Select * from employee where Metakeys contains SubDocType=2
我同意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)
SELECT * FROM employee WHERE Metakeys LIKE '%SubDocType=2%'
這不是在做查詢,因爲你不會得到任何好處索引的最有效的方式,但它的作品。
做的是固定設計,使有沒有在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搜索時拖網的性能問題,你將不必寫正則表達式尋找與多個鍵值對員工時。
在本專欄中您有3位信息。如果你發現自己需要編寫這種查詢,可能有時間將它們分開? – 2010-07-15 18:18:53