MySQL5.7.26 Ошибка функции round (), как ее исправить SQL? - PullRequest
0 голосов
/ 03 марта 2020

Когда я использую функцию round (), она не работает в случае:

enter image description here

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Это работает как задумано. round() возвращает данный аргумент, округленный до ближайшего значения, в соответствии с заданной точностью.

Таким образом, 2.5 (и все, что указано выше, вплоть до 3.5 не включено) округляется до 3, тогда как все, что строго меньше 2.5 (и больше или равно 1.5), округляется до 2.

Если вы хотите, чтобы integer часть номер, вы можете использовать floor() вместо: floor(2.5) дает вам 2.

0 голосов
/ 03 марта 2020
SELECT from_unixtime(1583173824,'%H') val1, 
       from_unixtime(1583173824,'%i') val2,
       from_unixtime(1583173824,'%H')+from_unixtime(1583173824,'%i')/60 val3,
       round(from_unixtime(1583173824,'%H')+from_unixtime(1583173824,'%i')/60) val4,
       round(CAST(from_unixtime(1583173824,'%H') AS DECIMAL(5,2))+from_unixtime(1583173824,'%i')/60) val5,
       round(from_unixtime(1583173824,'%H')+CAST(from_unixtime(1583173824,'%i')/60 AS DECIMAL(5,2))) val6,
       round(CAST(from_unixtime(1583173824,'%H') AS DECIMAL(5,2))+CAST(from_unixtime(1583173824,'%i')/60 AS DECIMAL(5,2))) val7,
       round(CAST(from_unixtime(1583173824,'%H') AS DECIMAL(5,2))+CAST(from_unixtime(1583173824,'%i') AS DECIMAL(5,2))/60) val8
val1 | val2 |    val3 | val4 | val5 | val6 | val7 | val8
:--- | :--- | ------: | ---: | ---: | ---: | ---: | ---:
18   | 30   | 18.5000 |   18 |   18 |   18 |   19 |   19

db <> fiddle здесь

from_unixtime используется в контексте числительности c - и скрипка показывает, что ее выходной тип данных является плавающей точкой.

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

...