oracle中一个字符串包含另一个字符串中的所有字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中一个字符串包含另一个字符串中的所有字符相关的知识,希望对你有一定的参考价值。

我要查询出一个数据表中符合下列条件的记录:
有一个数据表中两个字段A和B,都是字符型
查询A字符串中包含B字符串中所有的字符 的记录
例如: A字段值为abcd ,B字段值为bc或者ac 或者bd或者acd等都可,B中不能含有A中不存在的字符。

select * from a where instr(a,b)>0;

这个只能实现B字段是A字段中的某一部分的时候,

如果想要不论顺序或者不相邻的字符时,定义函数可以实现

 create or replace function checks(v_a varchar2,v_b varchar)

 return number

 as

    num number;

    cou number;

 begin

    num := -1;

    cou:=0;

    for i in 1..length(v_b) loop

       if instr(v_a,substr(v_b,i,1))>0 then

    cou:=cou+1;

       end if;

    end loop;

    if cou=length(v_b) then

    return cou;

    end if;

    dbms_output.put_line(cou||'    '||length(v_b));

 return num;

 end;

结果:

SQL> select * from a;

A          B

---------- ----------

asdf       sd

asdf       ad

asdf       df

asdf       asdf

SQL> select * from a where checks(a,b)>0;

A          B

---------- ----------

asdf       sd

asdf       ad

asdf       df

asdf       asdf

参考技术A 这要看你要在那里做处理了,如果在数据库中直接做处理 循环控制 你就可以用 loop
做个过程处理(PL/SQL) select substr('A123456',2,6) from dual
如此截取
要是在JAVA中做处理的话 就用for循环控制 。charat()这个方法可以用哦
思路是这 下面靠自己动手啦! 多写写就会了

还有循环的时候有个简单点的 就是把两个字符串的每个字符都进行排序了 然后看是不子串
参考技术B SELECT * FROM 表
WHERE A LIKE '%'||B||'%'
参考技术C 一条sql很难实现,要写对应的函数 参考技术D where a like '%'||b||'%' and b not like '%'||a||'%'

从另一个表中选择一个表的否定以及oracle的主表sql查询中的数据

【中文标题】从另一个表中选择一个表的否定以及oracle的主表sql查询中的数据【英文标题】:Select Negation of one table from another along with data in master table sql query for oracle 【发布时间】:2018-05-15 12:25:57 【问题描述】:

我遇到了一个问题。我的 oracle 数据库中有 3 个表。 第一个表包含所有注册员工:ID、FNAME、LNAME 第二个表包含所有员工(已注册 + 未注册):- ID、FNAME、LNAME 第三个表是一个主表,其中包含员工的所有详细信息以及地址。 ID 在所有 3 个表中都是通用的。

这里我的要求是编写一个查询,它将显示所有未注册的员工及其地址详细信息。

在所有必须忽略的表中,一些 ID 也为空。

表 1 - 注册用户 表 2 - 已注册+未注册 表 3 - 包含附加信息的主表

要求:- 为未注册用户选择 ID、姓名、地址。

查询将比解释更有帮助。

谢谢,

【问题讨论】:

提示:左连接或不存在。 嗨,Raymond,请您检查一下需求,如果可能的话,请让我知道这个问题。谢谢。 【参考方案1】:

我认为 not existsnot in 可以满足您的需求:

select m.*
from masters m
where not exists (select 1
                  from registered r
                  where r.id = m.id
                 );

【讨论】:

好的,我的要求是选择所有未注册的员工。 AllEmployeeTable(Registered+Unregisterd) 减去 RegisterdUser。这会给我所有未注册的用户。现在对于所有未注册的用户,我必须从第三张表中选择地址。

以上是关于oracle中一个字符串包含另一个字符串中的所有字符的主要内容,如果未能解决你的问题,请参考以下文章

在sql语句中怎么判断一个字段是不是包含在另一个字符串中

c_cpp 查找包含另一个字符串的所有字符的字符串中的最小窗口

如何查询一个oracle数据库中所有表的所有字段哪个包含特定字符串?

oracle 将表中所有字段拼接成一个字符串给另一个表的一个字段

SQL中字符串的连接

ORACLE怎样判断一个串中包含字串,如C#中的contain