Подтвердить что ты не робот

Удалить конечные нули в десятичном значении с изменяемой длиной

У меня есть процедура, которую я делаю, которая отображает шансы, но клиент хочет показать только значимые цифры. Таким образом, 1,50 будет отображаться как "1,5", а 1,00 будет отображаться как "1".

Как заставить MySQL не отображать конечные нули;

то есть. в базе данных:

Коэффициенты
1.500
23.030
2.000
4.450

будет отображаться как

1,5
23.03
2
4.45

Спасибо за любую помощь

4b9b3361

Ответ 1

SELECT TRIM(TRAILING '0' FROM yourodds)
FROM ...

Документы для функции TRIM.

Ответ 2

Самый простой способ - просто добавить ноль!

Примеры:

SET 
    @yournumber1="1.500", 
    @yournumber2="23.030",
    @yournumber3="2.000",
    @yournumber4="4.450"
;

SELECT 
    (@yournumber1+0),
    (@yournumber2+0),
    (@yournumber3+0),
    (@yournumber4+0)
;

+------------------+------------------+------------------+------------------+
| (@yournumber1+0) | (@yournumber2+0) | (@yournumber3+0) | (@yournumber4+0) |
+------------------+------------------+------------------+------------------+
|              1.5 |            23.03 |                2 |             4.45 |
+------------------+------------------+------------------+------------------+
1 row in set (0.00 sec)

Если столбец, в котором используется ваше значение, имеет тип DECIMAL или NUMERIC, затем сначала произведите его в строку, чтобы убедиться, что происходит преобразование... ex:

SELECT (CAST(`column_name` AS CHAR)+0) FROM `table_name`;

Для более короткого пути просто используйте любую встроенную строковую функцию для выполнения:

SELECT TRIM(`column_name`)+0 FROM `table_name`;

Ответ 3

РЕДАКТИРОВАТЬ: я бы использовал ответ ниже Кристофер Макгоуэн вместо этого - добавив 0 к значению, что лучше, а не.


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

Поэтому я думаю, что вы хотите использовать:

SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' from yourfield)) AS yourfield
FROM yourtable
WHERE yourfield LIKE '%.%'

Ответ 4

это сработало для меня.. вокруг поля до двух знаков после запятой, а затем обрезать любые завершающие нули

Итак, 2.10 равно 2.1

SELECT trim(round(FIELDNAME,2))+0 
FROM tbl_name
....

Ответ 5

Пожалуйста, используйте функцию ниже, она позаботится о том, чтобы число было нулевым без десятичных знаков, т.е. 150 и т.д.

 SET @saved_cs_client     = @@character_set_client;
 SET character_set_client = utf8;
 DELIMITER $$
 USE `mydbname`$$

 DROP FUNCTION IF EXISTS `FN_STRIP_TRAILING_ZER0`$$

 CREATE DEFINER=`mydbuser`@`%` FUNCTION `FN_STRIP_TRAILING_ZER0`(tNumber DECIMAL(10,7)) RETURNS VARCHAR(20) CHARSET utf8

 BEGIN
     DECLARE strBuff VARCHAR(20);
     DECLARE cnt  NUMERIC(2);
     DECLARE tString VARCHAR(20);
     SELECT CAST(tNumber AS CHAR) INTO tString;
     SELECT LOCATE('.',tString) INTO cnt;
     IF cnt > 0 THEN
       SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM tString)) INTO strBuff;   
     ELSE
       SET strBuff = tString;
     END IF;
     RETURN strBuff;
 END$$
 DELIMITER ;
 SET character_set_client = @saved_cs_client;

Добавление:

Обычно для вызова это включает:    SELECT FN_STRIP_TRAILING_ZER0 (1.5);

Ответ 6

Взяв ответ, предоставленный @fooquency, если столбец уже объявлен как DECIMAL с ненулевым значением для D в DECIMAL (M, D), нам не нужно выполнять условие WHERE

WHERE yourfield LIKE '%.%'

поскольку значения в столбце всегда будут содержать D цифр после десятичной точки (.)

Ответ 7

Используя ROUND или CEILING, в запросе вам просто нужно ввести:

SELECT ROUND(2/50) 

или

SELECT CEILING(2/50)

Ответ 8

У меня была аналогичная проблема в ситуации, когда я не мог изменить код или SQL-запрос, но мне было разрешено изменять структуру базы данных. Поэтому я изменил формат столбца с DECIMAL на FLOAT и решил мою проблему.

Ответ 9

SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' from yourfield)) AS yourfield
FROM yourtable
WHERE yourfield LIKE '%.%'

или

SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' from yourfield)) AS yourfield
FROM yourtable
WHERE instr(yourfield,'.') != 0

работает нормально, но требует предложение "where".

Я думаю, что лучшим решением, вероятно, является:

SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM ROUND(yourfield,3))) 
FROM yourtable

поскольку он не требует предложения "where", не требует специального кода, а также позволяет установить максимальную точность номера вверх.

Ответ 10

Лучшее решение, которое я нашел, - указать значение round для FLOAT:

SELECT CAST(ROUND(1.2345984372, 2) AS FLOAT)

Ответ 11

Попробуйте этот просто обновленный запрос, чтобы удалить десятичные нули

SELECT TRIM(TRAILING '.00' FROM price_column)
FROM table_name

Ответ 12

Вот что у меня сработало:

ЕДИНАЯ КОЛОННА:

SELECT TRIM(column_name)+0 AS column_name FROM table_name;

НЕСКОЛЬКО КОЛОНН:

SELECT 
TRIM(column1)+0 AS column1,
TRIM(column2)+0 AS column2,   
TRIM(column3)+0 AS column3,
FROM table_name;

Ответ 13

Взяв фрагменты ответов других на этой странице, я пришел к такому выводу:

SELECT ( IF(
    myfield LIKE '%.%', 
    TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM myfield)),
    myfield
) ) FROM mytable

ура

Ответ 14

Если вы используете PHP в качестве языка сценариев, вы можете использовать следующее:

$var = (float)$var_having_extra_0; // $var = (float) 17.5000

Или используйте функцию PHP floatval:

$var = floatval($var_having_extra_0); // $var = floatval(17.5000)