我的员工表中有一列MetaKeys。它包含如下所示的值:
MetaKeys="DocType=1***SubDocType=2***MinValue=123"
如何查询我的表并从MetaKeys列中仅获取SubDocType值?
Select * from employee where Metakeys contains SubDocType=2
答案 0 :(得分:0)
SELECT * FROM employee WHERE Metakeys LIKE '%SubDocType=2%'
这不是最有效的查询方式,因为您不会获得任何索引优势,但它确实有效。
答案 1 :(得分: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)
答案 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
);
此设计不会产生在执行元键搜索时必须遍历员工表的性能问题,并且在查找具有多个键值对的员工时不必编写正则表达式。