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
从 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