#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)
вместо этого.