【问题标题】:SQL LIKE with different wild cards pattern具有不同通配符模式的 SQL LIKE
【发布时间】:2016-02-15 07:31:23
【问题描述】:

我有一个表单来获取用户输入。在名称文本框字段中,用户将指定他希望如何实现WILD Card。例如,如果他键入abc,则查询应该是:

Select * from Student where Name Like '%' '@Name' + '%'

如果他键入 abc** 应该告诉查询返回名称以 abc 开头的行

Select * from Student where Name Like '@Name' + '%'

如果他键入 *abc* 应该告诉查询返回名称以 abc 结尾的行

Select * from Student where Name Like '%' + '@Name'

如何编写处理此类用户输入的查询? Regex 会帮忙吗?

【问题讨论】:

    标签: sql-server wildcard sql-like


    【解决方案1】:

    你应该试试下面的方法,

    DECLARE @Name AS VARCHAR(100)='*kklik'
    
    IF(CHARINDEX('*', @Name) = 1)
    BEGIN
        Select * from Student where Name Like '@Name' + '%'
    END
    ELSE IF(CHARINDEX('*', @Name) >= 1)
    BEGIN
        Select * from Student where Name Like '@Name' + '%'
    END
    

    【讨论】:

    • 您的回答会解决问题,但如果我的存储过程已经太长,这也需要更多代码。你不这么认为吗?
    • 是的,你是对的,但我已经在这里提到过你应该尝试下面的方法,这总是意味着你需要根据自己的情况使用很少的逻辑。顺便说一句,@Sahi 在阅读我的答案后帮助了你,这就是我想让你做的......
    【解决方案2】:

    试试这个

    DECLARE @Name AS VARCHAR(100)='abc*'
    
    if (CHARINDEX('*', @Name)>1)
      set @Name=Replace(@Name, '*', '%')
    else 
      set @Name='%'+@Name+'%'
    
    Declare @sqlText varchar(max)= "Select * from Student where Name Like '" + Replace(userinputtext, "*", "%") + "'";
    Exec(@sqlText)
    

    【讨论】:

      【解决方案3】:
      Declare @sqlText varchar(max)= "Select * from Student where Name Like '" + Replace(userinputtext, "*", "%") + "'";
      Exec(@sqlText)
      

      【讨论】:

      • 它不依赖于任何编程语言。我想要它在 SQL 中
      • 它只适用于*abcabc* 的情况。如果用户键入abc,它将返回零行。如果用户没有在搜索框中指定*,那么它应该查询like '%abc%'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 2023-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多