Как я могу отсортировать поле в числовом порядке после FORMAT() в MySQL?

#mysql #sql

#mysql #sql

Вопрос:

После использования FORMAT() для удаления некоторых ненужных десятичных знаков из моего результата я не могу правильно упорядочить по этому полю, поскольку это поле теперь является строкой, а не числом.

Что является хорошей практикой для упорядочивания результатов, а затем удаления десятичных знаков (или наоборот), чтобы они упорядочивались в правильном числовом порядке?


Результаты перед ФОРМАТИРОВАНИЕМ

 ORDER BY `Field` ASC

*---------*
| 1000.06 |
| 2000.17 |
| 3000.12 |
| 10000.4 |
| 20000.1 |
| 30000.2 |
*---------*
 

Результаты сортируются численно, но есть ненужные десятичные знаки, которые необходимо удалить.


Результаты после FORMAT()

 ORDER BY `Field` ASC   

*---------*
| 1,000   |
| 10,000  |
| 2,000   |
| 20,000  |
| 3,000   |
| 30,000  |
*---------*
 

В результатах были удалены десятичные разряды, но поскольку FORMAT() поле превратилось в строку, оно сортируется не численно, как нам требуется, а по алфавиту.


Требуемые результаты

 *---------*
| 1,000   |
| 2,000   |
| 3,000   |
| 10,000  |
| 20,000  | 
| 30,000  |
*---------* 
 

Требуемый результат заключается в том, чтобы результаты были отсортированы численно и были удалены десятичные знаки.

Комментарии:

1. Я должен сказать, я пытался CAST() обойти его, но это вызвало ошибки. (Предыдущая строка, которая была FORMAT(... , 0) AS Field , стала CAST(FORMAT(... , 0 ) AS INTEGER) AS Field , но это вызвало ошибки.) Поскольку я не был уверен, что это идеальный порядок для этого (т. Е. Хорошая практика) Я думал, что спрошу.

2. Правильно ли я понимаю, если скажу так: у вас есть номер. Вы преобразуете его в строку. Вы хотите преобразовать его обратно в число и отсортировать?

3. У меня есть числа с беспорядочными десятичными знаками, которые мне не нужны (например 1,000.00067 ). Мне нужно как удалить десятичные разряды, так и правильно отсортировать их по порядку чисел. Мне посоветовали использовать FORMAT() для удаления десятичных знаков, однако я не уверен, совместимо ли это с упорядочением в числовом порядке, и если да, то как лучше всего это сделать.

4. 1,000.00067 — это число или строка?

5. Вы можете сортировать по формату значения before .

Ответ №1:

Просто выберите форматированное значение и упорядочьте по неформатированному.

 SELECT FORMAT(value, 0) FROM t ORDER BY value ASC
 

Комментарии:

1. Мое значение получено из других полей, так что на самом деле это больше похоже ((SUM(FieldOne)) / (SUM(CASE WHEN FieldTwo != 0 THEN 1 ELSE 0 END)) AS Field на — я не уверен, как это сделать в этом случае, когда это сложнее? Извините, если это глупый вопрос. Я очень новичок в этом.

2. это работает для меня, в моем случае выберите …, ФОРМАТ ( сумма (T.значение) ,2) как «Итого», … из таблицы T… где … порядок по сумме (Т. значение)

Ответ №2:

Если все, что вам нужно FORMAT для удаления десятичных знаков, просто избавьтесь от него и используйте что-то вроде CAST(... AS signed) вместо этого.