当<时,MySQL加0 * 0.10

时间:2013-10-13 23:48:21

标签: mysql sql

我似乎无法找到/创建一个工作查询,当点之后的值低于.10时,它将使用额外的零更新x列。我有列x的值;

7.3
5.3
0.14

我正在尝试更新列,所以当点后面的值低于.10时,它会增加一个零,上面的例子最终需要看起来像;

7.03
5.03
0.14

有没有办法可以使用mysql UPDATE-query做到这一点?

非常感谢。

3 个答案:

答案 0 :(得分:1)

首先,0.03不等于0.30,所以我相信你想要的是7.30而不是7.03。为此,您需要更改表列以显示两位小数:

my_magic_column float(3,2)

其中3是总位数,2是要显示的小数位数。

答案 1 :(得分:0)

我真的不明白这种操作背后的想法,但它很简单。

SELECT CASE
    WHEN INSTR(id, '.') = 0 THEN id
    ELSE CASE
         WHEN CAST(SUBSTRING_INDEX(id, '.', -1) AS UNSIGNED) < 10 THEN
               CONCAT(SUBSTRING_INDEX(id, '.', 1), '.0', CAST(SUBSTRING_INDEX(id, '.', -1) AS UNSIGNED))
         ELSE id
    END
END as result
FROM table_name


UPDATE table_name SET id = CASE
    WHEN INSTR(id, '.') = 0 THEN id
    ELSE CASE
         WHEN CAST(SUBSTRING_INDEX(id, '.', -1) AS UNSIGNED) < 10 THEN
               CONCAT(SUBSTRING_INDEX(id, '.', 1), '.0', CAST(SUBSTRING_INDEX(id, '.', -1) AS UNSIGNED))
         ELSE id
    END
END

但在使用之前,请再次考虑您的架构以及您要做什么。我觉得你不需要这个。

答案 2 :(得分:0)

看起来你想要做的是:

update TABLE set YOUR_NUMBER = (FLOOR(NUMBER) + (NUMBER-FLOOR(NUMBER))/10)
where FLOOR(NUMBER*10) = NUMBER*10 

FLOOR(NUMBER) - 取整数部分并添加到其中:

(NUMBER-FLOOR(NUMBER))/10 - 数字的小数部分 - 除以10

where条件检查点后面只有一个数字