Я столкнулся с проблемой сортировки столбца с типом данных nvarchar. Как мне отсортировать это в порядке возрастания. Данные в таком формате...
1/0
22/21
19/26
2.3/14
29/0
1.3/44
85/30
Первое значение — это километр, оно может быть целым числом или двойным, затем косая черта, а последнее значение — номер полюса, оно всегда будет целым числом.
эти данные генерируются путем объединения двух столбцов, т.е.
select fromkm+"/"+frompole as FROM_KM from station;
fromkm и frompole имеют тип nvarchar в базе данных
Результат должен быть в следующем формате
1/0 1.3/44 2.3/14 19/26 22/21 29/0 85/30
Спасибо
Похоже, вы просто хотите отсортировать по первому значению, но отображаемые данные состоят из двух значений. В идеале вы должны выполнить сортировку перед объединением двух значений в отображаемую строку. Как выглядит ваш запрос? Пожалуйста, покажите немного кода, который вы используете.
Вы должны разделить косую черту, а затем отсортировать по каждому элементу в разделенном массиве. Вы можете использовать IComarer, как я сделал в следующей публикации: stackoverflow.com/questions/54311284/…
Попробуйте следующий запрос, добавьте предложение order by с именем вашего поля внутри функции Substring.
SELECT from km+"/"+ from pole as FROM_KM from station;
OEDER BY SUBSTRING(FROM_KM,1,2) ASC
Это приведет к текстовой сортировке (то есть 11 предшествует 2).
Сделайте сортировку в SQL, используя order by
. Обратите внимание, что поскольку ваши данные хранятся как nvarchar
, вам придется приводить их к float
/int
при сортировке (или еще лучше — изменить типы данных столбцов в базе данных):
select fromkm +"/"+ frompole as FROM_KM
from station
order by cast(fromkm as float), cast(frompole as int);
Не работает... и я не могу изменить тип данных, потому что проект завершен, и если сейчас я изменю тип данных, то столкнусь с серией ошибок. Как-то я просто хочу отсортировать это значение.
Дайте определение Not working
. Если вы не измените тип данных, вы можете столкнуться с более серьезными проблемами, когда встретите значения, такие как bla
, вместо числа.
Тип данных не изменяется в таблице, только для инструкции. FROM_KM по-прежнему будет тем же типом данных, что и раньше (nvarchar?)
Да, код, который я написал, не должен ничего менять в таблице, просто правильно отсортировать значение.
Да, это сработало, братан.. нет необходимости приводить fromepole к int.. он работает только с fromkm.. выберите fromkm+"/"+frompole как From_Km из порядка станций по приведению (fromkm как float).. этот запрос сработал.. Спасибо братан @ZoharPeled
Ну, если у вас есть такой результат: 3/2
и в другой строке 3/11
, Если вы хотите, чтобы строки были упорядочены, где 2
стоит перед 11
, вам нужно привести к int. Если вас интересует только порядок fromkm
, то вам вообще не нужна вторая часть order by
.
Какое это имеет отношение к С#?