【问题标题】:How do you order by a search phrase found in the beginning of a word and only afterwards the middle using SQL你如何通过在单词开头找到的搜索短语排序,然后使用 SQL 进行排序
【发布时间】:2011-04-21 17:41:16
【问题描述】:

假设我的表 [users] 包含字段 [Name],并且我在我的应用程序中编写了一个查询来按名称搜索。

数据库中的名字是:

拉拉 盟友

我的 SQL 查询是:

SELECT * FROM users WHERE [Name] LIKE '%al%'

“al”是我的搜索词。

我将如何按在开头找到的搜索词(即“%al”和之后的“%al%”)对结果进行排序。

结果集应该是

盟友 啦啦

我正在使用 SQL SERVER。

谢谢。

【问题讨论】:

    标签: sql search sorting sql-like


    【解决方案1】:

    刚刚结束了这个 SQLite 的查询变体,搜索词是“jeff”:

    SELECT name
     FROM details WHERE name LIKE 'jeff%' OR name LIKE '%jeff%' 
        ORDER BY (0 - (name LIKE 'jeff%') + (name LIKE '%jeff%')) || name 
        LIMIT 100;
    

    【讨论】:

      【解决方案2】:

      试试这个。假设您使用的是 sql server,这将适用于您需要的所有字符串-

      SELECT * FROM users WHERE [Name] LIKE '%al%'
      ORDER BY PATINDEX('%al%',[Name])
      

      【讨论】:

      • 我喜欢这个答案,但是当我测试它时它不起作用。我认为以下答案会起作用。 SELECT [name], PATINDEX('%al%',[name]) from users WHERE [name] like '%al%' ORDER by PATINDEX('%al%',[name])
      • SELECT patindex('al','lala') -> 0. SELECT patindex('%al%','lala') -> 2. 我刚刚在 SQL-Server 2005 上测试过。它在我看来你需要 %al%。
      • @Fillet - 对不起,你是对的。您需要 PATINDEX 中的 %al%。感谢您的信息。已编辑我的答案。
      • SQL-Server 2005。我收到此消息“'PATHINDEX' 未被识别为集成函数”。我认为应该是 PATINDEX。删除 H 后它运行,但我认为它需要 % 才能正确执行命令。
      • 好的,现在可以了。现在向我投赞成票,因为它简单而通用。
      【解决方案3】:

      如果您的 DBMS 支持它,我想您可以将您的选择包装在另一个名称上使用 index_of 的选择中,例如:

      select index_of('al', Name) as sortorder, * from (select * FROM users WHERE [Name] LIKE '%al%')
      order by sortorder
      

      【讨论】:

        【解决方案4】:

        类似这样的:

        SELECT 0, [Name] FROM users WHERE [Name] LIKE 'al%'
        
        UNION
        
        SELECT 1, [Name] FROM users WHERE [Name] LIKE '%al%'
          AND NOT [Name] LIKE 'al%'
        
        ORDER BY
          1, 2
        

        【讨论】:

        • 如果您有值 Ally,Lally,bbally 那么这将返回结果为 Ally,bbally,Lally 而 OP 需要它按 Ally,Lally,bbally 顺序。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-18
        • 1970-01-01
        相关资源
        最近更新 更多