检查字符串是否包含一个表中的值

时间:2014-06-23 09:45:32

标签: sql oracle

所以,我有一个表t_type,其中包含值:

t_type:

id | lib_type
--------------
1  | highschool
2  | University
3  | Unknown

我在另一个表格中进行SELECT查询,这个表格给我一个全名(例如:Foch Highschool,巴黎大学,随机企业)。

然后,我想在t_type中选择用第一个seelct获取的行:

SELECT *
from t_type
where  lib_typ contains '%'||fullname||'%';

所以,我有Foch Highschool:

必须返回1 | Highschool

如果是巴黎大学:

必须返回2 | University

并且,如果t_type中的SELECT不带任何行,

它将返回3 | Unkown

我找到了一些示例,展示了如何搜索,但有了这个:

SELECT *
from t_type
where  contains (lib_type, fullname ,1)

它不起作用,因为fullname总是大于lib_type。

我想要的是,如果那个fullname的一部分在我的表中包含一个lib_type,那么返回该行的id和lib_type。

这可能吗?

我希望我清楚,如果没有,请告诉我。

2 个答案:

答案 0 :(得分:1)

据我所知,你正在寻找类似的东西;

SELECT id, lib_type FROM (
  SELECT id, lib_type, 1 prio FROM mytable
  WHERE UPPER('Foch Highschool') LIKE UPPER('%'||lib_type||'%')
  UNION ALL 
  SELECT id, lib_type, 2 prio FROM mytable
  WHERE id=3
  ORDER BY prio
) z
WHERE ROWNUM=1;

An SQLfiddle to test with

它选择与您的输入匹配的第一个lib类型,如果没有匹配,则获取id为3的行。

通过在任何命中设置prio 1,在默认情况下设置prio 2,然后按prio排序并获得第一个匹配来实现。

答案 1 :(得分:0)

如果我完全理解你的问题,我认为你必须这样做:

SELECT *
FROM t_type
WHERE  lib_type LIKE "YourResult%"

字符串YourResult包含您要搜索的文本;)