0

我正在使用如下的 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”的剩余匹配作为下一个

4

4 回答 4

0
 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 中选择 *
于 2013-06-03T05:43:56.967 回答
0

一旦尝试这个

string str="select * from Tbl_Book where Book_Name like '%"+strPosition+"%' or ("+strPositionList +")";
于 2013-06-03T05:12:35.240 回答
0

我想不出另一种解决方案,但您可以合并您的结果,但首先查询几乎完全匹配的内容,然后查询相似性并使用联合将它们加入。(我没有使用过 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
于 2013-06-03T05:30:51.567 回答
0

这应该很接近:

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
于 2013-06-03T06:44:02.073 回答