Ответ 1
SELECT TRIM(TRAILING '0' FROM yourodds)
FROM ...
Документы для функции TRIM.
У меня есть процедура, которую я делаю, которая отображает шансы, но клиент хочет показать только значимые цифры. Таким образом, 1,50 будет отображаться как "1,5", а 1,00 будет отображаться как "1".
Как заставить MySQL не отображать конечные нули;
то есть. в базе данных:
Коэффициенты
1.500
23.030
2.000
4.450
будет отображаться как
1,5
23.03
2
4.45
Спасибо за любую помощь
SELECT TRIM(TRAILING '0' FROM yourodds)
FROM ...
Документы для функции TRIM.
Самый простой способ - просто добавить ноль!
Примеры:
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`;
РЕДАКТИРОВАТЬ: я бы использовал ответ ниже Кристофер Макгоуэн вместо этого - добавив 0 к значению, что лучше, а не.
Важно проверить, есть ли на самом деле десятичная точка при выполнении обрезки.
Поэтому я думаю, что вы хотите использовать:
SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' from yourfield)) AS yourfield
FROM yourtable
WHERE yourfield LIKE '%.%'
это сработало для меня.. вокруг поля до двух знаков после запятой, а затем обрезать любые завершающие нули
Итак, 2.10 равно 2.1
SELECT trim(round(FIELDNAME,2))+0
FROM tbl_name
....
Пожалуйста, используйте функцию ниже, она позаботится о том, чтобы число было нулевым без десятичных знаков, т.е. 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);
Взяв ответ, предоставленный @fooquency, если столбец уже объявлен как DECIMAL с ненулевым значением для D в DECIMAL (M, D), нам не нужно выполнять условие WHERE
WHERE yourfield LIKE '%.%'
поскольку значения в столбце всегда будут содержать D цифр после десятичной точки (.)
Используя ROUND или CEILING, в запросе вам просто нужно ввести:
SELECT ROUND(2/50)
или
SELECT CEILING(2/50)
У меня была аналогичная проблема в ситуации, когда я не мог изменить код или SQL-запрос, но мне было разрешено изменять структуру базы данных. Поэтому я изменил формат столбца с DECIMAL на FLOAT и решил мою проблему.
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", не требует специального кода, а также позволяет установить максимальную точность номера вверх.
Лучшее решение, которое я нашел, - указать значение round для FLOAT:
SELECT CAST(ROUND(1.2345984372, 2) AS FLOAT)
Попробуйте этот просто обновленный запрос, чтобы удалить десятичные нули
SELECT TRIM(TRAILING '.00' FROM price_column)
FROM table_name
Вот что у меня сработало:
ЕДИНАЯ КОЛОННА:
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;
Взяв фрагменты ответов других на этой странице, я пришел к такому выводу:
SELECT ( IF(
myfield LIKE '%.%',
TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM myfield)),
myfield
) ) FROM mytable
ура
Если вы используете PHP в качестве языка сценариев, вы можете использовать следующее:
$var = (float)$var_having_extra_0; // $var = (float) 17.5000
Или используйте функцию PHP floatval
:
$var = floatval($var_having_extra_0); // $var = floatval(17.5000)