У меня есть столбец, который является обычно только числами (иногда, это - буквы, но это не важно).
Как я могу сделать это естественным видом?
В настоящее время виды как это: {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
Вы можете смешивать параметры порядка...
Вы связали, используя:
'OrderBy ColumnName Asc'
в конце вашего запроса.
Брось это. Кроме того, не забудьте использовать IsNumeric, чтобы убедиться, что вы получаете обратно только числа (если они включают буквы, это важно;).
SELECT textval FROM tablename
WHERE IsNumeric(textval) = 1
ORDER BY CAST(textval as int)
Также приведите к типу данных, который будет содержать наибольшее значение.
Если вам также нужны нечисловые значения в результирующем наборе, просто добавьте запрос UNION, где IsNumeric = 0 (упорядочить по своему усмотрению) либо до, либо после.