栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

根据业务逻辑获取第一个合并结果

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

根据业务逻辑获取第一个合并结果

这应该可以解决问题:

Declare @str VARCHAr(100) = 'A|B|C';DECLARE@Test TABLE    (         Id         INT        ,Definition VARCHAr(100)    )INSERT INTO    @Test (Id, Definition)VALUES     (1, 'A|B|C')    ,(2, 'er|All|All|B')    ,(3, 'All|All|All')    ,(4, 'All|bela|All')    ,(5, 'All|All|All|G')    ,(6, 'A|All|All')    ,(7, 'All|B|All')    ,(8, 'Av|All|All|G');---------------------------------------------------------------------------WITH Tester AS(    SELECt         Id        ,Definition        ,(LEN(Definition) - LEN(REPLACE(Definition, 'All', ''))) / LEN('All') AS numAlls        ,REPLACE(Definition, 'All', '%') AS Mask    FROM        @Test)SELECt TOP 1     Id    ,DefinitionFROM    TesterWHERe    @str LIKE MaskORDER BY     numAlls

这里的主键是列:

(LEN(Definition) - LEN(REPLACe(Definition, 'All', ''))) / LEN('All') AS numAlls

基本上,我接受您给出的顺序的想法,并通过简单地计算单词

All
在定义中出现的次数而不是显式创建多个语句来使其变得更通用。

希望有道理/能解决问题!


编辑:

为了完整起见并解决@HABO在评论中提出的真正有效的观点,即上述解决方案在单词

All
出现在字符串中的任何时间都将匹配,即使它是另一个语句/单词的一部分,下面的解决方案也是健壮/保证仅匹配以下情况
All

WITH Tester AS(    SELECT         Id        ,Definition        ,(LEN('|' + Definition + '|') - LEN(REPLACE('|' + Definition + '|', '|All|', ''))) / LEN('|All|') AS numAlls        ,REPLACE('|' + Definition + '|', '|All|', '|%|') AS Mask    FROM        @Test)SELECt TOP 1     Id    ,DefinitionFROM    TesterWHERe    '|' + @str + '|' LIKE MaskORDER BY     numAlls

基本上,您可以

Definition
使用分隔符(
|
)将其括起来,以确保
Definition
开头和结尾的每个部分都以分隔符(开始/结束值并非如此),然后我们就可以进行全文搜索
|All|

希望这对为什么这是一个更加健壮的解决方案有意义。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/410846.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号