#mysql #sql
#mysql #sql
Вопрос:
Я пишу запрос, который используется программным обеспечением для создания отчетов.
Часть этого запрашивает часы, необходимые для завершения проекта. Мы записываем это значение с плавающей запятой в 2 после запятой, чтобы мы могли оценить с точностью до четверти часа.
Однако, если мы используем его в нашем отчете, и час, который мы записали, составляет что-то вроде 8.00, я хочу запросить его и отформатировать так, чтобы 8.00 было просто 8. Однако любые часы с чем-то большим, чем десятичное число, например 8.25, должны оставаться равными 8.25. Как я могу заставить это работать?
hours Queried Result
====== -> My Query -> ==============
8.00 8
8.25 8.25
Я использую MySQL 5.6
Комментарии:
1. Как должно
8.5
быть возвращено?2. 8.50 — это нормально. Все это хранится как
decimal(11,2)
типы, поэтому все, кроме целых чисел, может быть просто как есть.3. В вопросе говорится, что это число с плавающей запятой, а не десятичное. Это не одно и то же.
Ответ №1:
Вы можете использовать REPLACE()
функцию для удаления .00
:
REPLACE(hours, '.00', '') AS hours
Ответ №2:
Вы можете преобразовать его в строку и проверить самые правые 2 символа и обрезать их, если они равны ’00’.
SELECT TRIM(TRAILING '.00' FROM CAST(column_name AS VARCHAR));
Ответ №3:
ВЫБЕРИТЕ REPLACE(Round(8.00), ‘.00’, ‘ ‘);
Я приведу больше примеров, чтобы вы могли прояснить свою логику:
MySQL ROUND() округляет число, указанное в качестве аргумента, до числа, указанного в качестве другого аргумента.
Синтаксис:
ROUND(N,[D]);
Где ‘N’ округляется до D знаков после запятой. и ‘D’ указывает, до скольких знаков после запятой N будет округлено.
Пример 1:-
SELECT ROUND(4.43);
Вывод :-
4
Приведенный выше оператор MySQL округлит заданное число 4.43. Десятичные знаки не определены, поэтому десятичное значение по умолчанию равно 0.
Пример 2:-
SELECT ROUND(-4.53);
Вывод:-
-5