我是靠谱客的博主 无聊豌豆,最近开发中收集的这篇文章主要介绍oracle 先精确再模糊查找,请问一条sql语句的有关问题,怎么先精确匹配在模糊匹配...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

请教一条sql语句的问题,如何先精确匹配在模糊匹配。

如题有一张user表。里面有个name字段

传值 @name

希望

select * from user where name=@name如果有值 就显示出来

如果没值 就进行模糊匹配 显示出

select * from user where name like '%'+@name+'%';

的效果

可不可以直接一条sql搞定 不通过if判断

------解决思路----------------------

with table1 as

(

select 'a' [name] union all

select 'bac' [name] union all

select 'b' [name]

)

select * from table1

where [name] like case when (select COUNT(*) from table1 where [name]='a') >0 then 'a' else '%a%' end

------解决思路----------------------

1楼的当然可以, 但效率不高, 数据量大时会有瓶颈(相当于查了两次)。 建议你写IF来查。

------解决思路----------------------

不用if 就用case when then 呗~~

------解决思路----------------------

楼主想一条语句完成,肯定需要带子查询了,1楼符合楼主要求

------解决思路----------------------

-- 参数

DECLARE @name varchar(20)

SET @name = 'x'

-- 一条sql搞定

;WITH

/* 测试数据

[user](id,[name]) as

(

SELECT 1,'x' UNION ALL

SELECT 2,'y' UNION ALL

SELECT 3,'xyz' UNION ALL

SELECT 4,'zyx'

),*/

a AS (

select *,1 grp from [user] where name=@name

UNION ALL

select *,2 grp from [user] where name like '%'+@name+'%'

),

b AS (

SELECT *,

RANK() OVER(ORDER BY grp) rank

FROM a

)

SELECT id,[name]

FROM b

WHERE rank = 1

@name = 'x' 的结果

id name

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

1 x

@name = 'z' 的结果

id name

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

3 xyz

4 zyx

------解决思路----------------------

Tiger_Zhao 很牛

01511759.gif

------解决思路----------------------

不用if,肯定要2个都查了,效率反而低

怕代码繁琐,可以写成通用的存储过程 sameorlike(表名,字段名,待查内容)。。。。

------解决思路----------------------

一条语句是为了什么目的?

难道是为了性能更差?.

逻辑是怎么样,就怎么处理就是了.不要求一条语句

------解决思路----------------------

select * from user where name like '%'+@name+'%'  order by case when name =@name then 1 else 2 end,name

结果都在里面,只是你要的顺序不同

最后

以上就是无聊豌豆为你收集整理的oracle 先精确再模糊查找,请问一条sql语句的有关问题,怎么先精确匹配在模糊匹配...的全部内容,希望文章能够帮你解决oracle 先精确再模糊查找,请问一条sql语句的有关问题,怎么先精确匹配在模糊匹配...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部