代码之家  ›  专栏  ›  技术社区  ›  Robert MouzmiSadiq

SQL语法错误

  •  0
  • Robert MouzmiSadiq  · 技术社区  · 16 年前

    我正在使用Microsoft SQL Server,我认为它是T-SQL或ANSI SQL。

    我想用字符串搜索数据库。符合字符串要求的匹配项应该首先出现,然后按字母顺序排序。

    也就是说,如果表中包含 FOO , BAR RAP

    搜索字符串 'R' 应该屈服:

    说唱
    酒吧

    按这样的顺序。

    这是我的尝试:

    SELECT     Name
    FROM       MyTable
    WHERE      (Name LIKE '%' + @name + '%')
    ORDER BY   (IF(Name LIKE @name + '%',1,0)) 
    

    错误消息为:“必须声明标量变量@name”

    4 回复  |  直到 16 年前
        1
  •  3
  •   Madhivanan    16 年前
    declare  @name varchar(10)
    set @name='R'
    SELECT     Name 
    FROM       (select 'foo' as name union select 'RAP' union select 'BAR') MyTable 
    WHERE      (Name LIKE '%' +  @name  + '%') 
    ORDER BY   charindex(@name ,name)
    
        2
  •  2
  •   TcKs    16 年前

    .

    DECLARE @name VARCHAR(MAX);
    SET @name = 'foo';
    
    SELECT     Name
    FROM       MyTable
    WHERE      Name LIKE '%' + @name + '%'
    ORDER BY   CASE WHEN Name LIKE @name + '%' THEN 1 ELSE 0 END;
    
        3
  •  1
  •   devio    16 年前

    其他解决方案似乎遗漏了“按字母顺序排序”部分:

    DECLARE    @Search VARCHAR(MAX)
    SET        @Search = 'R'
    
    SELECT     0, Name 
    FROM       MyTable 
    WHERE      Name LIKE @Search + '%'
    UNION ALL
    SELECT     1, Name
    FROM       MyTable
    WHERE      Name like '%_' + @Search + '%'
    ORDER BY   1, 2
    
        4
  •  1
  •   Grzegorz Gierlik    16 年前

    似乎是你 错过 变量 宣言 :

    DECALRE @name varchar(50) -- adjust type and length of variable
    SET @name = 'phrase' -- for MSSQL 2008 you can do it in one line