SQL 服务器 dense_rank() 在 nvarchar 列上

SQL Server dense_rank() on nvarchar column

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

这是一个SQL fiddle where I created a nvarchar column, see the results yourself, and here's one where the column is int

当然可以。但是你的例子完全不同。首先,值排序为:

1
11
2
3
4
5

第二个像这样:

1
2
3
4
5
11

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

编辑:

有两种方法可以"treat the nvarchar()"作为数字。首先是做一个转换,比如:

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

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

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

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