Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MS SQL-如何按通配符对结果排序?_Sql_Sql Server - Fatal编程技术网

MS SQL-如何按通配符对结果排序?

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'

查询:

结果:

如何排序,使前导通配符为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'       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