当前位置: 代码迷 >> Oracle开发 >> 请问个关于模糊查询的有关问题
  详细解决方案

请问个关于模糊查询的有关问题

热度:60   发布时间:2016-04-24 06:39:33.0
请教个关于模糊查询的问题
问题是这样的,一般的模糊查询直接可以用 like 去。
但是,现在我遇到了这样的一个问题:
数据库里的表(T)有个字段(state)类型是 number的。
比如:1:已经处理,2:尚未处理,3:忽略处理,4:错误的处理方法。
在客户端的展示就是 展示的后面的字符串而不是 1  2 3 。。。
现在,客户端有个模糊查询,如果输入的有“忽略”二字的,那么就需要把state为3的查询出来。
大神··给个意见1·咋个搞?

存储过程?本人对oracle就是个菜鸟。

麻烦大神讲解下··咋个实现···
------解决方案--------------------
应当建立一张基础数据表look_up,将
1:已经处理,2:尚未处理,3:忽略处理,4:错误的处理方法
的映射关系存放其中。这张表也可以存储其他基础数据,新增一列做区分。

key value           description
1   'processed'     'T'
2   'in processing' 'T'
...

类似以上,然后将该表与你的事物数据表做关联查询。
------解决方案--------------------
WITH TMP AS
 (SELECT 1 FLG, '已经处理' PVALUE
    FROM DUAL
  UNION ALL
  SELECT 2 FLG, '尚未处理' PVALUE
    FROM DUAL
  UNION ALL
  SELECT 3 FLG, '忽略处理' PVALUE
    FROM DUAL
  UNION ALL
  SELECT 4 FLG, '错误的处理方法' PVALUE
    FROM DUAL)
SELECT * FROM TMP T WHERE T.PVALUE LIKE '%忽略%'
------解决方案--------------------
WITH TMP AS
 (SELECT 1 FLG, '已经处理' PVALUE
    FROM DUAL
  UNION ALL
  SELECT 2 FLG, '尚未处理' PVALUE
    FROM DUAL
  UNION ALL
  SELECT 3 FLG, '忽略处理' PVALUE
    FROM DUAL
  UNION ALL
  SELECT 4 FLG, '错误的处理方法' PVALUE
    FROM DUAL)
SELECT * FROM TMP T WHERE T.PVALUE LIKE '%忽略%'

------解决方案--------------------

WITH TMP AS
 (SELECT 1 FLG
    FROM DUAL
  UNION ALL
  SELECT 2 FLG
    FROM DUAL
  UNION ALL
  SELECT 3 FLG
    FROM DUAL
  UNION ALL
  SELECT 4 FLG
    FROM DUAL)
SELECT *
  FROM (SELECT FLG,
               DECODE(FLG,
                      1,
                      '已经处理',
                      2,
                      '尚未处理',
                      3,
                      '忽略处理',
                      4,
                      '错误的处理方法') PVALUE
          FROM TMP) T
 WHERE T.PVALUE LIKE '忽略%';


------解决方案--------------------
引用:
问题是这样的,一般的模糊查询直接可以用 like 去。
但是,现在我遇到了这样的一个问题:
数据库里的表(T)有个字段(state)类型是 number的。
比如:1:已经处理,2:尚未处理,3:忽略处理,4:错误的处理方法。
在客户端的展示就是 展示的后面的字符串而不是 1  2 3 。。。
现在,客户端有个模糊查询,如果输入的有“忽略”二字的,那么就需要把state为3的查询出来。
大神··给个意见1·咋个搞?

存储过程?本人对oracle就是个菜鸟。

麻烦大神讲解下··咋个实现···


select *  from test where decode(state,1,'deal',2,'not deal',3,'ignore',4,'error','others')='not deal';
------解决方案--------------------
decode
------解决方案--------------------
难道没有视图吗,关于state的,可以关联视图,进行模糊查询啊
------解决方案--------------------
如果问题规模不扩大,那么无论是基于建表的查询还是用视图,其效率都没有decode的效率高!如果需要具体实现方式,请您把需求描述的详细一点
------解决方案--------------------
顶1楼的说法,还是应该建立一个像字典表一样的东西。如果只是用sql或者pl/sql来解决的话,不是最好的方法。
  相关解决方案