nvarchar列上的SQL Server dense_rank()

时间:2015-04-10 01:17:09

标签: sql-server sql-server-2005

this question开始,是否可以在dense_rank列上正确使用nvarchar

在这里SQL fiddle我创建了一个nvarchar列,请自行查看结果,此处one where the column is int

1 个答案:

答案 0 :(得分:2)

当然有可能。但是你的例子完全不同。在第一个中,值按以下顺序排序:

1
11
2
3
4
5

在第二个像这样:

1
2
3
4
5
11

因此,结果不同。存储为字符串的数字被视为字符串,而不是数字。

编辑:

有两种方法可以“将nvarchar()”视为一个数字。第一种是进行转换,例如:

dense_rank() over (order by cast(Number as decimal)) grp

(或任何你想要的类型)。

如果值为整数且没有前导零,则第二个将起作用:

dense_rank() over (order by len(Number), Number) grp