如何在sql server中使用"like"搜索数据

Aij*_*han 2 sql-server sql-server-2008

我输入了一个单词"boat",所以我需要以船开头的记录,还包含"船".但是从"船"开始必须首先出现

我试过跟随

Select   AsiccCodeId,AsiccDescription             
FROM     AsiccCodeMaster  c             
WHERE    c.AsiccDescription like 'boat%' or c.AsiccDescription like '%boat%'
Run Code Online (Sandbox Code Playgroud)

select a.* from
(

 Select   AsiccCodeId,AsiccDescription             
 FROM     AsiccCodeMaster  c             
 WHERE c.IsActive = 1  and (GoodFor = 'M' or GoodFor = 'B')
 and c.AsiccDescription like 'Unmilled%'



 UNION

 Select   AsiccCodeId,AsiccDescription             
 FROM     AsiccCodeMaster  c             
 WHERE c.IsActive = 1  and (GoodFor = 'M' or GoodFor = 'B')
 and c.AsiccDescription like '%Unmilled%'



 )a
Run Code Online (Sandbox Code Playgroud)

但它给了我

4137    Combustion Boats 
6360    Boat, Fibre
6361    Boat, Rubber - Motorized
6362    Boat, Wooden Canal Boats
6363    Boat, Wooden With Engine
6370    Wooden Boats Body Building
6374    Boat, Rowing / Sports
6375    Boat, Rubber - Nonmotorized
6376    Boat, Wooden Without Engine-Others
6379    Parts Of Ships, Boats Etc., N.E.C
6391    Ships, Boats & Other Vessels, N.E.C
6394    Ships, Boats & Other Vessels, N.E.C
Run Code Online (Sandbox Code Playgroud)

我需要先以"船"开头的记录,然后是包含"船"的记录

Eva*_*n M 10

在Order By子句中使用CASE语句

SELECT   AsiccCodeId,AsiccDescription             
FROM     AsiccCodeMaster  c             
WHERE    c.AsiccDescription like '%boat%'
ORDER BY CASE WHEN c.AsiccDescription like 'boat%' THEN 0 ELSE 1 END, c.AsiccDescription
Run Code Online (Sandbox Code Playgroud)

由于您希望以"船"开头的标题首先出现,因此CASE语句将优先考虑这些标题.它查看每条记录,如果描述以'boat'开头,则为其分配一个排序值0,否则它会为其分配一个排序值1. ORDER BY默认按升序排序,因此它将全部放入0(在所有1(剩余记录)之前以'船'开头的那些