sql - SQL Server 中 NVARCHAR 列的排序依据

标签 sql sql-server tsql sql-order-by

我在 SQL Server 2005 中有一个包含字母或数字的 NVARCHAR(255) 列。

Declare @Temp Table(Name NVARCHAR(255))

Insert Into @Temp Values('1')
Insert Into @Temp Values('2')
Insert Into @Temp Values('3')
Insert Into @Temp Values('10')
Insert Into @Temp Values('aaaa')
Insert Into @Temp Values('ccaaaaa')
Insert Into @Temp Values('cca')
Insert Into @Temp Values('cccc')
Insert Into @Temp Values('ccaa')

Select * From  @Temp Order by Name

此查询返回错误结果。有人可以解释一下为什么吗?
另外,有人可以告诉我使用哪个查询来对值进行排序。
我想获得下一个序列:

1
2
3
10
aaaa
cca
ccaa
ccaaaaa
cccc

谢谢

最佳答案

@Shark 向您展示了原因,我将向您展示 SELECT 中的解决方法,以获得您想要的结果:

Select * From  @Temp 
Order by 
    case isnumeric(name) 
       when 1 then cast(name as int) 
       else 999999999999999 end, 
    name

关于sql - SQL Server 中 NVARCHAR 列的排序依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9265792/

相关文章:

mysql - SQL 将计数(来自 2 个表)添加到现有选择(来自 3 个表)

sql - 在 SQLite 中根据 Radius 查询获取记录?

c# - super 模糊名称检查?

由于外部 WHERE,SQL Server 转换失败

excel - 使用 Raiserror : Is this possible? 将多步 ADO 查询的进度传递到 VBA

java - PostgreSQL & JDBC 使用 `setArray` 设置整数数组抛出异常 "cannot cast type integer[] to integer"

sql - 将 XML 插入 SQL Server 表

sql-server - 如何在 SQL 中删除此字符串中的额外占位符?

SQL查询返回两个表的报告

php - 数据库表结构查询