2017-12-02 106 views
0

當我提問某個單詞時,它會完成單詞或向其添加新單詞。 獨一無二的前10個錄音。用於自動壓縮的mssql查詢

declare @Category table (CategoryName varchar(50)) 

insert into @Category (CategoryName) values('phones') 
insert into @Category (CategoryName) values('phone blue') 
insert into @Category (CategoryName) values('phone pink') 
insert into @Category (CategoryName) values('phone big') 
insert into @Category (CategoryName) values('phone big bang') 
insert into @Category (CategoryName) values('bad phone blue') 
insert into @Category (CategoryName) values('bad phone pink') 
insert into @Category (CategoryName) values('bad phone but good') 

的類別名稱 「手機」

  • 電話藍色
  • 手機粉色
  • 手機大
  • 手機,但

打電話時,我想下面的結果調用類別時,我希望獲得以下結果名爲 「PHON」

  • 電話
  • 手機
+2

這對於關係數據庫來說確實不是一個合適的問題。 –

+0

看起來像'我的手機%'類'我的例子 – jean

回答

0
declare @Category table (CategoryName varchar(50)) 

insert into @Category (CategoryName) values('phone blue') 
insert into @Category (CategoryName) values('phone pink') 
insert into @Category (CategoryName) values('phone big') 
insert into @Category (CategoryName) values('phone big bang') 
insert into @Category (CategoryName) values('bad phone blue') 
insert into @Category (CategoryName) values('bad phone pink') 
insert into @Category (CategoryName) values('bad phone but good') 
insert into @Category (CategoryName) values('phone') 
insert into @Category (CategoryName) values('silly phone') 
insert into @Category (CategoryName) values('lost phone ') 
insert into @Category (CategoryName) values('white phone user') 
insert into @Category (CategoryName) values('some device') 
insert into @Category (CategoryName) values('phoner homer') 
insert into @Category (CategoryName) values('space phone ') 
insert into @Category (CategoryName) values('jam phone hex doc') 

declare @Formword varchar(50) = 'phone'; 

select CategoryName 
     --, charindex(@FormWord,Categoryname) 
     --, charindex(@FormWord,Categoryname) + len(@FormWord)-1 
     --, charindex(' ',CategoryName,charindex(@FormWord,Categoryname) + len(@FormWord)) 
     --, ltrim(right(categoryname,(len(categoryname)-charindex(' ',CategoryName,charindex(@FormWord,Categoryname) + len(@FormWord))))) 
     --, charindex(' ',ltrim(right(categoryname,(len(categoryname)-charindex(' ',CategoryName,charindex(@FormWord,Categoryname) + len(@FormWord)))))) 
     --, left(ltrim(right(categoryname,(len(categoryname)-charindex(' ',CategoryName,charindex(@FormWord,Categoryname) + len(@FormWord))))),charindex(' ',ltrim(right(categoryname,(len(categoryname)-charindex(' ',CategoryName,charindex(@FormWord,Categoryname) + len(@FormWord))))))) 
     , case when charindex(' ',ltrim(right(categoryname,(len(categoryname)-charindex(' ',CategoryName,charindex(@FormWord,Categoryname) + len(@FormWord)))))) = 0 
        then @Formword + ' ' + ltrim(right(categoryname,(len(categoryname)-charindex(' ',CategoryName,charindex(@FormWord,Categoryname) + len(@FormWord))))) 
       else 
        @Formword + ' ' + left(ltrim(right(categoryname,(len(categoryname)-charindex(' ',CategoryName,charindex(@FormWord,Categoryname) + len(@FormWord))))),charindex(' ',ltrim(right(categoryname,(len(categoryname)-charindex(' ',CategoryName,charindex(@FormWord,Categoryname) + len(@FormWord))))))) 
      end [next word] 

from @Category 
where 1 = 1 
     and CategoryName like '%' + @Formword + '%' 
     and len(CategoryName) > len(@Formword) + 1 
     and charindex(@FormWord,Categoryname) + len(@FormWord) < len(Categoryname) 
+2

嘿!儘管此代碼片段可能是解決方案,但[包括解釋](https://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – wing

+0

非常感謝您的回覆,我很感謝您。 但問題存在問題。當我提問「phon」時,只有「電話」應該結束。 您能否讓結果獨一無二,並限於前10條記錄? –

0
declare @Category table (CategoryName varchar(50)) 

insert into @Category (CategoryName) values('phones') 
insert into @Category (CategoryName) values('phone blue') 
insert into @Category (CategoryName) values('phone pink') 
insert into @Category (CategoryName) values('phone big') 
insert into @Category (CategoryName) values('phone big bang') 
insert into @Category (CategoryName) values('bad phone blue') 
insert into @Category (CategoryName) values('bad phone pink') 
insert into @Category (CategoryName) values('bad phone but good') 


declare @searchWord varchar(50) = 'phone'; 
declare @res int; 

set @res = (select case when (select count(*) from @Category 
       where substring(CategoryName, 0, CHARINDEX(' ', CategoryName)) = @searchWord) > 0 
       then 1 
       else 0 
      end) 
if(@res = 1) 
begin 
    select top 10 CategoryName from @Category where CategoryName like''[email protected]+'%' and CategoryName like '% %' order by CategoryName 
end 
else 
begin 
    select top 10 CategoryName from @Category where CategoryName like''[email protected]+'%' and CategoryName not like '% %' order by CategoryName 
end 

我希望這有助於。

+0

當「phone」這個詞被詢問時,結果如下:電話,電話藍色,電話粉紅色,電話大,電話但 –