在引号之间的字段中获取数据(即" s)

时间:2016-07-05 23:09:48

标签: sql oracle

有没有办法在查询中选择引号中的数据?例如,我有一个包含值

的字段
SYS_Data("THE DATA I WANT")

有没有办法在SQL(特别是Oracle)中搜索它?

我真的只需要能够看到引号中的值是否与另一个表中的另一个字段完全匹配。

2 个答案:

答案 0 :(得分:0)

您可以使用regexp_substr()。 。

select regexp_substr(field, '"[^"]*"', 1, 1)

如果您不想在结果中使用双引号,可以使用replace()删除它们:

select replace(regexp_substr(field, '"[^"]*"', 1, 1), '"', '')

答案 1 :(得分:0)

如果您只需要看到字段的那一部分与另一个表中另一个字段中的另一个字符串匹配,则应使用LIKE运算符。假设您必须确保字符串出现在" first"中的引号内。字段,你可以使用类似的东西:

... where table1.field1 LIKE '%"' || table2.field2 || '"%'

例如:

with table1 (id, txt) as (
     select 1, 'SYS.Data("THE DATA I WANT")' from dual union all
     select 3, 'SYS.Data("THE DATA I HAVE")' from dual
     ),
     table2 (comp_string) as (select 'THE DATA I WANT' from dual)
select id, txt
from table1 join table2
on txt like '%"' || comp_string || '"%'
;

        ID TXT
---------- ---------------------------
         1 SYS.Data("THE DATA I WANT")

1 row selected.

如果您需要执行比较忽略大小写(大写或小写),您可以将like运算符的两边都包裹在upper()中。

注意:由于Oracle不会根据SQL标准处理NULL字符值,因此您会发现当table1.field1包含两个双引号时,此解决方案会返回行当field2中的列table2包含NULL时,继承(它们之间没有任何内容)。像往常一样,如果这不是期望的行为,可以通过添加条件...where table2.field2 is not NULL来避免。