oracle 先精确再模糊查找,Sql语句:先精确匹配再模糊查询

查询需求:MSSQL查据库,先进行完整精确查询,如果有记录就直接显示,没有记录则进行模糊匹配。如何通过一条sql查询语句实现?

有一张user表。里面有个name字段,[email protected],完整查询

select * from user where [email protected]

如果有值 就直接显示,没有值,则执行模糊查询

select * from user where name like [email protected]+'%'

实现语句:

方法一

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

方法二

-- 参数

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 [email protected]

UNION ALL

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

),

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

个人觉得,第二种方法在先精确查询再模糊查询中效率更高。

声明:如需转载,请注明来源于www.webym.net并保留原文链接:http://www.webym.net/jiaocheng/1087.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值