Sql Server query varchar data sort вроде int
У меня есть одна таблица, например
CREATE TABLE table_name
(
P_Id int,
amount varchar(50)
)
Данные как
Id amount
----------
1 2340
2 4568
3 10000
Теперь я хочу сортировать таблицу по количеству, но одна проблема - это количество varchar, чтобы сортировать таблицу следующим образом
Id amount
----------
3 10000
1 2340
2 4568
но я хочу получить результат, подобный этому
Id amount
----------
3 10000
2 4568
1 2340
что мне делать?
Ответы
Ответ 1
Введите количество столбцов в числовое число в ORDER BY
при выборе:
SELECT * FROM MyTable
ORDER BY CAST(amount AS Numeric(10,0)) DESC
Результат:
╔════╦════════╗
║ ID ║ AMOUNT ║
╠════╬════════╣
║ 3 ║ 10000 ║
║ 2 ║ 4568 ║
║ 1 ║ 2340 ║
╚════╩════════╝
Ответ 2
Попробуйте ABS():
SELECT * FROM MyTable ORDER BY ABS(MyCol) DESC;
SQL Fiddle
Ответ 3
Попробуйте это
SELECT *
FROM #varchar_field
ORDER BY
CASE
WHEN ISNUMERIC(mixed_field) = 1 THEN CAST(mixed_field AS FLOAT)
WHEN ISNUMERIC(LEFT(mixed_field,1)) = 0 THEN ASCII(LEFT(LOWER(mixed_field),1))
ELSE 2147483647
END
Ссылка: http://sqlserverplanet.com/tsql/how-to-order-numeric-values-in-a-varchar-field