MS SQL-如何按通配符对结果排序?
查询: 结果: 如何排序,使前导通配符为3,4的记录位于第一位?试试这个MS SQL-如何按通配符对结果排序?,sql,sql-server,Sql,Sql Server,查询: 结果: 如何排序,使前导通配符为3,4的记录位于第一位?试试这个 SELECT [Name] FROM [dbo].[City] where name like '%laus%' 结果 ;WITH CTE(name ) AS ( SELECT 'Berlin' UNION ALL SELECT 'Laura' UNION ALL SELECT 'Losangels' UNION ALL SELECT 'Lausanne'
SELECT [Name]
FROM [dbo].[City]
where name like '%laus%'
结果
;WITH CTE(name )
AS
(
SELECT 'Berlin' UNION ALL
SELECT 'Laura' UNION ALL
SELECT 'Losangels' UNION ALL
SELECT 'Lausanne' UNION ALL
SELECT 'Lausen' UNION ALL
SELECT 'Roamanel' UNION ALL
SELECT 'Sankt Niklaus' UNION ALL
SELECT 'Vennes sur-Lausanne'
)
SELECT * FROM CTE
ORDER BY (CASE WHEN name like 'Laus%' THEN 1 END ) DESC
您可以尝试,但最好的方法是使用全文搜索
name
--------
Lausanne
Lausen
Losangels
Laura
Roamanel
Sankt Niklaus
Vennes sur-Lausanne
Berlin
您只需在查询中按名称添加订单。。。使用通配符时没有任何区别。使用通配符或不使用通配符时效果相同。获得精确结果的最佳方法是使用全文搜索。我猜您想按照您喜欢的表达方式中的最佳匹配进行订购。您如何决定洛桑和洛森需要首先出现?为什么最佳方式使用全文搜索?最佳匹配排序与Denis上的评论相同回答:这不会显示所有城市,只显示像“%laus%”这样的城市。@PawelCz 1。阅读TS问题。2.丹尼斯·鲁巴什金晚了,你不这么认为吗?@TapakahUa,嗯,好斗的一个,冷静点。OP接受了你的答案,所以我错了。这不会显示所有城市,只显示像“%laus%”这样的城市。我认为OP想要展示所有这些。但这是一次很好的尝试!谢谢你的评论,@PawelCz,我已经更正了我的答案。但是,也许用一个大数字代替LENname会是一个更好的决定。
SELECT [Name]
FROM [City]
where name like '%laus%'
ORDER BY
CHARINDEX('laus',name)
DECLARE @City TABLE(Name VARCHAR(32))
INSERT @City VALUES
('Belmont-sur-Lausanne'),
('Lausanne'),
('Lausen'),
('Le Mont-sur-Lausanne'),
('Berlin')
SELECT [Name]
FROM @City
--where name like '%laus%'
order by CASE WHEN PATINDEX('%laus%', name) = 0
THEN LEN(name)
ELSE PATINDEX('%laus%', name)
END
,name