zoukankan      html  css  js  c++  java
  • T-SQL---多值模糊查询的处理

    多值模糊查询的处理

    所谓多值模糊查询,就是应用程序中传递过来多个参数,对这些参数做拆分,拆分之后,对拆分结果的key值分别做模糊查询处理

    对于精确匹配时,不管是单个Key值还是多个Key值,都很容易处理,备选方案也很多

    对于模糊查询,单个key值也很容易,也就是 ……where name like '%parameter%'(不要告诉我全模糊效率低之类的,我这里不是做性能对比的)

    但是对于多个Key值的模糊处理,就不是太直接了,比如name字段,输入'三,四,五',要求分别按照三,四,五三个字符做模糊匹配

    多值模糊查询可以参考如下的方式处理,欢迎提供更好的办法,谢谢了

    CREATE TABLE [dbo].[Student](
        [S#] [varchar](50) NULL,
        [Sname] [varchar](50) NULL,
        [Ssex] [varchar](2) NULL
    )
    
    
    INSERT INTO Student VALUES (1,'张三',1)
    INSERT INTO Student VALUES (2,'李四',1)
    INSERT INTO Student VALUES (3,'王五',1)
    INSERT INTO Student VALUES (4,'赵六',1)
    INSERT INTO Student VALUES (5,'孙七',1)
    
    
    --精确匹配的话,不管是单值还是多值,都很好处理
    select * from Student where Sname in ('张三','李四')
    
    --单值模糊的好处理
    select * from Student where Sname Like '%五%'
    
    --多值模糊匹配,就没有这么直接了
    
    --所谓的多值模糊匹配,就是外面传递进来多个值,这些值差分开之后,每个值都做模糊查询
    
    
    --SQL既要写满足功能性需求,又要简明的清晰,一开始还想写函数什么玩意的,
    --后来想了想,可以这么处理
    ;with CTEName
    as
    (
        --这是一个字符串拆分函数
        select id,concat('%',s,'%') as name from dbo.f_splitStrToTable('四,五,六',',')
    )
    select * from Student
    where exists
    (
        select 1 from CTEName where Sname like name
    )
    
    --查询结果
    
    S# Sname Ssex
    2 李四 1
    3 王五 1
    4 赵六 1
    
    (3 row(s) affected)
  • 相关阅读:
    插槽分发内容
    Java学习-sgg-day07-20200422-复习
    Java学习-sgg-day06-20200421-今天晚上在下载资料
    Java学习-sgg-day05-20200420
    Java学习之面向对象之总结-sgg-day04-20200419
    Java学习之Eclipse的使用-sgg-day04-20200419
    Java学习之面向对象-sgg-day04-20200419
    Java学习之面向对象-sgg-day03-20200418
    Java学习总结-前三天
    Java学习之-sgg-day03-20200418
  • 原文地址:https://www.cnblogs.com/wy123/p/5683887.html
Copyright © 2011-2022 走看看