在Oracle SQL中搜索值以及其他文本

时间:2017-07-12 08:42:26

标签: sql oracle

我希望了解如何编写一个查询,以便我可以搜索我正在寻找的文本周围有其他文本的列。

我的表目前看起来像这样:

NAME    CODES        REQUIRED_CODE
------  -----------  -------------
Humpty  AB@CD@EF@GH  IJ
Minnie  AB@CD        CD
Mickey  ZA@HP@YP     HP

我想要做的是添加一个True / False列,它将在代码字段中搜索所需的代码,但我不确定如何写这个。

REQUIRED

NAME    CODES        REQUIRED_CODE  TRU
------  -----------  -------------  -----
Humpty  AB@CD@EF@GH  IJ             False
Minnie  AB@CD        CD             True
Mickey  ZA@HP@YP     HP             True

如果有人可以建议我如何撰写本文,我将不胜感激。

提前致谢。

1 个答案:

答案 0 :(得分:-1)

您需要创建一个触发器,该触发器将在插入和更新时触发,以保持布尔列的值。

如果你的桌子的DDL看起来像这样:

create table tab (
    codes         varchar2(30),
    required_code varchar2(3),
    code_found    varchar2(3)
);

然后像这样触发DDL可能会对你有用。

create or replace trigger tab_code_found before insert or update 
   on tab for each row
begin
   if :new.codes like '%' || :new.required_code || '%' then
      :new.code_found := 'YES';
   else
      :new.code_found := 'NO';
   end if;
end;

您可以使用此谓词来代替类似运算符,这可能会消耗更少的CPU周期:

   instr(:new.codes, :new.required_code) > 0