我有一个程序,我正在显示赔率,但客户只想显示有效数字。因此,1.50将显示为“1.5”,而1.00将显示为“1”。
如何让MySQL不显示尾随零;
即。在数据库中:
赔率
1.500
23.030
2.000
4.450
将显示为
1.5
23.03
2
4.45
感谢您的帮助
答案 0 :(得分:54)
到目前为止最简单的方法,只需添加零!
示例:
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类型,则首先将其强制转换为字符串,以确保转换发生...例如:
SELECT (CAST(`column_name` AS CHAR)+0) FROM `table_name`;
对于更短的方法,只需使用任何内置字符串函数进行强制转换:
SELECT TRIM(`column_name`)+0 FROM `table_name`;
答案 1 :(得分:42)
编辑:我会使用Christopher McGowan的答案 - 将值加0,这样会更好。
如果进行修剪,检查实际上是否有小数点非常重要。
所以我认为你想要使用:
SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' from yourfield)) AS yourfield
FROM yourtable
WHERE yourfield LIKE '%.%'
答案 2 :(得分:8)
这对我有用..将字段围绕2位小数,然后修剪任何尾随零
所以2.10是2.1
SELECT trim(round(FIELDNAME,2))+0
FROM tbl_name
....
答案 3 :(得分:3)
请使用以下功能,它将照顾没有小数位的零号,即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);
答案 4 :(得分:2)
提出@fooquency提供的答案,如果列已经被声明为DECIMAL,在DECIMAL(M,D)中D为非零值,我们不需要执行WHERE条件
WHERE yourfield LIKE '%.%'
因为列中的值将始终包含小数点后的D位(。)
答案 5 :(得分:1)
要从DECIMAL
/ NUMERIC
或字符串类型列中删除尾随零,您只需将值强制转换为DOUBLE
,例如:
SELECT CAST(mycol AS DOUBLE) from mytable;
实际上,其他答案中提到的“加零”技巧也一样,但是以更间接(且可能效率更低)的方式进行,例如:
SELECT CAST(mycol AS CHAR)+0 FROM mytable; -- converts to string, then to number
SELECT TRIM(mycol)+0 FROM mytable; -- ditto
答案 6 :(得分:0)
使用ROUND或CEILING,在查询中只需键入:
SELECT ROUND(2/50)
或
SELECT CEILING(2/50)
答案 7 :(得分:0)
在我无法修改代码和SQL查询的情况下,我遇到了类似的问题,但我被允许修改数据库结构。所以我将列格式从DECIMAL更改为FLOAT,它解决了我的问题。
答案 8 :(得分:0)
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
工作正常但需要"其中"子句。
我认为最好的解决方案可能是:
SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM ROUND(yourfield,3)))
FROM yourtable
因为它不需要"其中"条款,不需要任何特殊代码, 并且还允许您预先设置数字的最大精度。
答案 9 :(得分:0)
我找到的最佳解决方案是将您的舍入值转换为FLOAT:
SELECT CAST(ROUND(1.2345984372, 2) AS FLOAT)
答案 10 :(得分:0)
尝试使用简单更新查询以删除十进制零
SELECT TRIM(TRAILING '.00' FROM price_column)
FROM table_name
答案 11 :(得分:0)
这对我有用:
单栏:
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;
答案 12 :(得分:0)
在此页面中其他答案的片段中,我得出了以下结论:
SELECT ( IF(
myfield LIKE '%.%',
TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM myfield)),
myfield
) ) FROM mytable
欢呼
答案 13 :(得分:-1)
SELECT TRIM(TRAILING '0' FROM yourodds)
FROM ...
TRIM function的文档。
答案 14 :(得分:-2)
如果您使用PHP作为脚本语言,则可以使用以下内容:
$var = (float)$var_having_extra_0; // $var = (float) 17.5000
或使用PHP floatval
函数:
$var = floatval($var_having_extra_0); // $var = floatval(17.5000)