我定义了一个名为 Inventory 的表,其中包含一个varchar(45)
名为ItemNameCode
. 这是表格,包含以下字母数字值。
我们要按字母数字排序为:
MES40
PT14
PT14-403
PT14-646-649
PT14-646-649
PT15-3-11
PT15-12-42
PT15-12-572-575
PT16-164
PT16-227
PT16-62-71
PT16-136
PT16-137
我尝试了以下查询,但没有得到确切的顺序:
SELECT ItemNameCode
FROM Inventory
ORDER BY LEFT(ItemNameCode,PATINDEX('%[0-9]%',ItemNameCode)-1)
在这种情况下,简单地排序
ItemNameCode
不会给你想要的排序。使用ORDER BY ItemNameCode
会像这样对 PT15 值进行排序:但是,您希望它们像这样排序:
根据您的预期结果,我会将所需的排序行为描述为“字符串由用破折号分隔的段组成。第一段是字母数字,每个后续段都是数字。排序应该由第一段完成,然后由第二段,然后是第三段,等等"
要做到这一点,您需要将其分解
ItemNameCode
为单独的计算列,并在排序之前将数字段转换为整数。这种将字符串拆分为单独列的方法非常难看,但有效:
如果第 2、3、4 等值不是严格的数字,并且您还需要字母数字排序,则可以尝试
ORDER BY
在同一查询中使用此备用子句: