Поиск определенного значения в столбце в Oracle - PullRequest
0 голосов
/ 15 июля 2010

У меня есть столбец MetaKeys в моей таблице сотрудников.Он содержит значение, подобное показанному ниже:

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

Как запросить мою таблицу и получить только значение SubDocType из столбца MetaKeys?

Select * from employee where Metakeys contains SubDocType=2

Ответы [ 3 ]

0 голосов
/ 15 июля 2010

Я согласен с Мартином Смитом, что вам может потребоваться нормализовать эту информацию. При этом, вот одно из возможных решений, которое может работать на вас:

SELECT SUBSTR (expr, INSTR (expr, '=') + 1) subdoctypeval
  FROM (SELECT REGEXP_SUBSTR ('DocType=1***SubDocType=2***MinValue=123',
                              'SubDocType=[^*]+',
                              1,
                              1)
                   expr
          FROM DUAL)
0 голосов
/ 16 июля 2010

Правильно, что нужно сделать, это исправить дизайн, чтобы в таблице 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
);

В этом проекте не будет проблемы с производительностью, связанной с необходимостью обхода таблицы сотрудников при выполнении поиска по мета-ключам, и вам не придется писать регулярные выражения при поиске сотрудника с несколькими парами ключ-значение.

0 голосов
/ 15 июля 2010
SELECT * FROM employee WHERE Metakeys LIKE '%SubDocType=2%'

Это не самый эффективный способ выполнения запросов, потому что вы не получите никаких преимуществ в индексировании, но он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...