在Order By 中玩点花样——将匹配项在前的放前面

在做一个文本框自动完成的小插件时, 发现一个问题:

如想搜索叫“林”某某的人, 输入“林”时, 出来的列表, 不是以“林”开头, 而是“陈X林”, 郁闷……闲暇时想了下修改的方法:

--0. 准备数据
DECLARE @T TABLE (T_Id VARCHAR(32), T_Name NVARCHAR(50))

INSERT INTO @T
SELECT REPLACE(NEWID(), '-', ''),'陈小林' UNION ALL
SELECT REPLACE(NEWID(), '-', ''),'包飞林' UNION ALL
SELECT REPLACE(NEWID(), '-', ''),'林冲' UNION ALL
SELECT REPLACE(NEWID(), '-', ''),'刘华' UNION ALL
SELECT REPLACE(NEWID(), '-', ''),'史大奈'

--搜索参数定义
DECLARE @Input NVARCHAR(20)
SET @Input = N'林'

--1. 普通情况
SELECT *
FROM   @T
WHERE  T_name LIKE '%'+@Input+'%'
ORDER BY
       T_Name ASC
/*
C6445FF9657744B2B29D94F981FBFC4D	包飞林
B0D9A541F23048B8B3FE07C0A4641D50	陈小林
F84341EF5E2545B5B854B92A6FC6D6BE	林冲
*/

--2. 将匹配项在前的优先
SELECT *
FROM   @T
WHERE  T_name LIKE '%'+@Input+'%'
ORDER BY
       CASE 
            WHEN SUBSTRING(T_Name, 1, LEN(@Input)) = @Input THEN 1
            ELSE 0
       END DESC,
       T_Name ASC
/*
F84341EF5E2545B5B854B92A6FC6D6BE	林冲
C6445FF9657744B2B29D94F981FBFC4D	包飞林
B0D9A541F23048B8B3FE07C0A4641D50	陈小林
*/
       
--3. 将匹配项在前的优先, 简化版
SELECT *
FROM   @T
WHERE  T_name LIKE '%'+@Input+'%'
ORDER BY
	   CHARINDEX(@Input,T_Name) ASC,
       T_Name ASC
/*
F84341EF5E2545B5B854B92A6FC6D6BE	林冲
C6445FF9657744B2B29D94F981FBFC4D	包飞林
B0D9A541F23048B8B3FE07C0A4641D50	陈小林
*/


【6层】一字型框架办公楼(含建筑结构图、计算书) 1、资源目源码均已通过严格测试验证,保证能够正常运行; 2、目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源目源码均已通过严格测试验证,保证能够正常运行; 2、目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源目源码均已通过严格测试验证,保证能够正常运行; 2、目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值