C# 在sql中使用like查询首先显示最大匹配

C# 在sql中使用like查询首先显示最大匹配,c#,asp.net,sql,oracle,C#,Asp.net,Sql,Oracle,我使用的sql查询如下 string strPosition = "Blithe Spirit"; string[] ArrPosition=new string[5]; string strPositionList = ""; if (!strPosition.Equals("")) { ArrPosition = strPosition.Split(' '); } fore

我使用的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 +")";
在上面的查询中。我得到的结果是图书名称,如Blith Spirit、Blith、Spirit。这是我需要的输出,但得到的输出顺序是数据库行顺序。我需要最大匹配,即完全匹配“Blith Spirit”作为第一个,剩余匹配的“Blith”和“Spirit”作为下一个

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

我现在想不出另一种解决方案,但你可以合并你的结果,但首先查询几乎完全匹配的内容,然后查询相似性,并使用合并将它们合并。我还没有使用你的标签之一,所以我不知道确切的语法

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
这应该很接近:

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

这将以混合顺序获取数据…我需要全名作为第一个,拆分名称作为下一个我不确定。。试一下这个。。。string str=从Tbl_Book中选择*,其中Book_Name类似“%+strPosition+%”或+strPositionList+按Book_Name desc排序;按书名排序将以字母表顺序获取数据我需要两者。输出为全文搜索作为第一个,拆分文本搜索作为下一个使用Oracle文本
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