От this question, можно ли использовать dense_rank
должным образом на столбце nvarchar
?SQL Server dense_rank() на столбце nvarchar
Вот SQL fiddle где я создал nvarchar
колонку, видеть результаты сами, и вот one where the column is int
От this question, можно ли использовать dense_rank
должным образом на столбце nvarchar
?SQL Server dense_rank() на столбце nvarchar
Вот SQL fiddle где я создал nvarchar
колонку, видеть результаты сами, и вот one where the column is int
Конечно, это возможно. Но ваши примеры совершенно разные. В первом случае, значения упорядочены следующим образом:
1
11
2
3
4
5
Во втором, как это:
1
2
3
4
5
11
Таким образом, результаты различны. Числа, хранящиеся в виде строк, рассматриваются как строки, а не числа.
EDIT:
Есть два способа "лечения в NVARCHAR()" в виде числа. Первый заключается в том, чтобы сделать преобразование, такое как:
dense_rank() over (order by cast(Number as decimal)) grp
(или любой другой тип, который вы хотите).
Второй будет работать, если значения являются целыми числами и не имеют ведущих нулей:
dense_rank() over (order by len(Number), Number) grp
Но можно заказать их численно на колонке NVARCHAR? – crimson
Спасибо, я поставил конвертировать/отличить не туда. Смогут принять ответ – crimson