【问题标题】:Alphanumeric and Numeric sorting in SQL ServerSQL Server 中的字母数字和数字排序
【发布时间】:2016-01-25 20:33:35
【问题描述】:

我需要对字母数字和数字排序应用排序。

例子:

319,
519, 
620, 
1154, 
1195, 
319lov,
319, 
620lov

我需要这样的结果:

319,
319,
319lov,
519, 
620, 
620lov,
1154, 
1195, 

我已应用以下代码进行排序:

SELECT Name 
FROM TableName
ORDER BY CAST(CASE
                 WHEN Name LIKE '[0-9][0-9][0-9][0-9]%' THEN LEFT(Name ,4)
                 WHEN Name LIKE '[0-9][0-9][0-9]%' THEN LEFT(Name ,3)
                 ELSE NULL 
              END AS INT)

得到的结果如下:

319,
319lov,
319,
519, 
620,
620lov, 
1154, 
1195,  

【问题讨论】:

标签: sql sql-server sorting sql-order-by natural-sort


【解决方案1】:
SELECT name FROM t 
ORDER BY CONVERT(INT, LEFT(name, PATINDEX('%[^0-9]%', name+'z')-1)),name;

您按所有数字排序,直到第一个非数字,字母在其中以相同的方式处理所有字符串。

FIDDLE

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2015-07-13
  • 1970-01-01
  • 2021-09-03
  • 2018-08-28
相关资源
最近更新 更多