Это работало для меня ...
Я создал таблицу с примерно 15 строками, некоторые из которых содержат символы ($, £, €), а некоторые нет. Я создал расчетное поле CAST как DECIMAL, затем я проверяю самый левый символ, чтобы увидеть, можно ли его отливать в виде числа, если мы проверим самый правый символ, так как некоторые валюты помещают символ в конец. Если правый символ равен> 0, мы используем значение priority_value, иначе мы берем левые символы. Вернемся к первому оператору IF, если он не больше 0, что означает, что он либо ведет с 0 (что не имеет значения), либо было не числом (в данном случае денежным символом), поэтому мы принимаем самый правый текст. Наконец, мы закрываем поле CAST и сортируем его. Вы можете поместить это как вычисленное поле или как ORDER BY. Я сказал это двумя способами ниже.
SELECT prize_value,
CAST(IF(LEFT(test.prize_value,1) IN ('.',','),
REPLACE(test.prize_value,LEFT(test.prize_value,1),'0.'),
IF(CAST(LEFT(test.prize_value, 1) AS DECIMAL(10,2)) > 0,
IF(CAST(RIGHT(test.prize_value, 1) AS DECIMAL(10,2)) > 0,
test.prize_value,
LEFT(test.prize_value, LENGTH(test.prize_value) - 1)
),
RIGHT(test.prize_value, LENGTH(test.prize_value) - 1)
)
)
AS DECIMAL(10,2)) AS prize_value_only
FROM chatter.test
ORDER BY prize_value_only ASC
--- ИЛИ ---
SELECT prize_value
FROM chatter.test
ORDER BY
CAST(IF(LEFT(test.prize_value,1) IN ('.',','),
REPLACE(test.prize_value,LEFT(test.prize_value,1),'0.'),
IF(CAST(LEFT(test.prize_value, 1) AS DECIMAL(10,2)) > 0,
IF(CAST(RIGHT(test.prize_value, 1) AS DECIMAL(10,2)) > 0,
test.prize_value,
LEFT(test.prize_value, LENGTH(test.prize_value) - 1)
),
RIGHT(test.prize_value, LENGTH(test.prize_value) - 1)
)
) AS DECIMAL(10,2)) ASC
Можете ли вы показать выборки данных для вашего столбца таблицы? –
@RahulTripathi отредактировал вопрос –