У меня есть столбец, который обычно состоит только из цифр (иногда это буквы, но это не важно).
Как мне сделать его натуральным?
В настоящее время сортируется так: {1,10,11,12,2,3,4,5,6,7,8,9}
Я хочу отсортировать так: {1,2,3,4,5,6,7,8,9,10,11,12}
IsNumeric «сломан», ISNUMERIC (CHAR (13)) возвращает 1, и CAST не будет выполнен.
Используйте ISNUMERIC (textval + 'e0').Окончательный код:
ORDER BY PropertyName, CASE ISNUMERIC(MixedField + 'e0') WHEN 1 THEN 0 ELSE 1 END, -- letters after numbers CASE ISNUMERIC(MixedField + 'e0') WHEN 1 THEN CAST(MixedField AS INT) ELSE 0 END, MixedField
Вы можете смешать параметры заказа ...
В ролях. Кроме того, не забудьте использовать IsNumeric, чтобы убедиться, что вы вернули только цифры (если они содержат буквы, это важно;).
SELECT textval FROM tablename WHERE IsNumeric(textval) = 1 ORDER BY CAST(textval as int)
Также приведите к типу данных, который будет содержать наибольшее значение.
Если в результирующем наборе вы тоже нуждаетесь не в числах, просто добавьте запрос UNION, где IsNumeric = 0 (порядок по вашему желанию), до или после.
Вы связали, используя:
'OrderBy ColumnName Asc'
в конце вашего запроса.