如何在 SQL 中对字母数字数据进行排序






3.42/5 (4投票s)
在 SQL 中对字母数字数据进行排序。
引言
如果您的 SQL 查询没有按您期望的顺序返回结果集,本文可能有助于解决此问题。
背景
我们都知道 ORDER BY
关键字用于按指定的列对结果集进行排序。在大多数情况下,它工作得很好。但是,对于字母数字数据,它可能不会返回您期望的结果集。本文解释了如何轻松修复此问题。
Using the Code
步骤 1
我创建了一个名为“Test”的表,其中包含两个列,如下所示
以下数据已添加到“Test”表中
以下 SQL 查询中的“Order By
”可能不会按正确的顺序返回结果集。
Select ID From TestOrder by ID
第二步
我已经修改了 ORDER BY
子句,如下所示,并且它返回了正确顺序的结果。
(注意:ID 列定义为 varchar(20)
。因此,我执行以下操作来解决此问题
- 如果 ID 是数字,则在 ID 值前面添加 21 个 '0' 并获取最后 20 个字符
- 如果 ID 不是数字,则在 ID 值末尾添加 21 个 '' 并获取前 20 个字符
Select ID
From Test
ORDER BY
Case When IsNumeric(ID) = 1 then Right(Replicate('0',21) + ID, 20)
When IsNumeric(ID) = 0 then Left(ID + Replicate('',21), 20)
Else ID
End
步骤 3
我修改了查询以返回行号(用于分页),并且它有效!
(注意:ROW_NUMBER
仅适用于 SQL Server 2005 及更高版本。)
Select Row_Number() Over (Order by
Case When IsNumeric(ID) = 1 then Right(Replicate('0',21) + ID, 20)
When IsNumeric(ID) = 0 then Left(ID + Replicate('',21), 20)
Else ID
END) As RowNumber,
ID
From Test
欢迎提出任何建议/评论!
关注点
可能有更好的方法来做到这一点。请分享您的想法。
历史
- 2010 年 1 月 7 日:初始版本。