【问题标题】:Display maximum match at first using like query in sql首先使用 sql 中的类似查询显示最大匹配
【发布时间】:2013-06-03 05:04:35
【问题描述】:

我正在使用如下的 sql 查询

string strPosition = "Blithe Spirit";
        string[] ArrPosition=new string[5];
        string strPositionList = "";
        if (!strPosition.Equals(""))
        {
            ArrPosition = strPosition.Split(' ');
        }
        foreach (string word in ArrPosition)
        {
            strPositionList += "CurrPosi like '%" + word + "%' or ";
        }

  string str="select * from Tbl_Book where Book_Name like %"+strPosition+"% or ("+strPositionList +")";

在上面的查询中。我得到的结果是像 Blithe Spirit,Blithe,Spirit 这样的书名。这是我需要的输出,但是获取输出顺序为数据库行顺序。我需要最大匹配,即完全匹配 ' Blithe Spirit' 作为第一个,'Blithe' 和 'Spirit' 的剩余匹配作为下一个

【问题讨论】:

标签: c# asp.net sql oracle


【解决方案1】:

我想不出另一种解决方案,但您可以合并您的结果,但首先查询几乎完全匹配的内容,然后查询相似性并使用联合将它们连接起来。 (我没有使用过 oracle(你的标签之一),所以我不确定它的确切语法)。

select 1 as [i], * from Tbl_Book where Book_Name like '%"+strPosition+"%'
union
select 2 as [i], * from Tbl_Book where Book_Name not like '%"+strPosition+"%' and "+strPositionList

【讨论】:

    【解决方案2】:

    试试这个

    string str="select * from Tbl_Book where Book_Name like '%"+strPosition+"%' or ("+strPositionList +")";
    

    【讨论】:

    • 这会以混合顺序获取数据...我需要全名作为第一个,拆分名称作为下一个
    • 我不确定.. 试试这个... string str="select * from Tbl_Book where Book_Name like '%"+strPosition+"%' or ("+strPositionList +")" order by Book_Name desc;
    • 按书名排序将按字母顺序获取数据
    【解决方案3】:
    WITH CTE (COLUMN_NAMES) /*这里指定所有列名(tbl_book)*/ 作为 ( SELECT * from Tbl_Book where Book_Name like 'Blithe Spirit' ), CTE2 作为 ( SELECT * from Tbl_Book where Book_Name like 'Blithe' ), CTE3 作为 ( SELECT * from Tbl_Book where Book_Name like 'Spirit' ) 从 CTE 中选择 * 联盟 从 CTE2 中选择 * 联盟 从 CTE3 中选择 *

    【讨论】:

      【解决方案4】:

      这应该很接近:

      SELECT *
      FROM (
        SELECT 1 as sortorder,*
        FROM tbl_book
        WHERE book_name like %"+strPosition+"%
        UNION
        SELECT 2 as sortorder,*
        FROM tbl_book
        WHERE book_name like ("+strPositionList +")
      ) t1
      ORDER BY sortorder
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-23
        • 2018-10-05
        相关资源
        最近更新 更多