我遇到了一个问题,我需要使用四舍五入将列舍入到小数点后一位。它与SELECT语句一起工作,我可以让FORMAT与SELECT语句一起工作,但我不能让它与UPDATE语句一起工作,这是我需要使用它的原因。下面是我的代码:
update _transrecords
LEFT OUTER JOIN _V0_X1 ON V0_X1_PK = V0_X1_FK
set f6sp = ROUND(f6*V0_x1_a3, 1)
select
ROUND(F6 * V0_X1_A3, 1) as F6sp
from _TransRecords
LEFT OUTER JOIN _V0_X1 ON V0_X1_PK = V0_X1_FK在此之后,我需要去掉F6sp中的小数点,其中F6sp在小数点后有一个零,但它不适用于SELECT或UPDATE语句。我正在尝试使用REGEXP来查找十进制值为零的位置。以下是我对此的声明:
SELECT
FORMAT(F6sp,0) AS F6sp
FROM _TransRecords
WHERE F6sp REGEXP '.period.zero.$'
UPDATE _TransRecords
SET F6sp = ROUND(F6sp)
WHERE F6sp REGEXP '.period.zero.$'我已经在这里搜索过了:
https://dev.mysql.com/doc/refman/5.1/en/regexp.html https://dev.mysql.com/doc/refman/5.1/en/mathematical-functions.html
和大量的堆栈溢出问题,这还没有帮助。不过,我的语句没有收到错误消息。REGEXP只是返回一个空集。
我还尝试在regexp表达式之间添加两个句点,但仍然得到一个空集。
WHERE F6sp REGEXP '.period..zero.$'谢谢
发布于 2015-07-19 02:57:03
好吧,不使用REGEXP:
UPDATE _TransRecords
SET F6sp = ROUND(F6sp)
WHERE INSTR(F6sp,'.0')>0;应该做这件事。
发布于 2015-07-19 03:24:46
您不能对decimal列执行您想要的操作。小数位数由类型决定,而不是值。所以,你只会得到0.00000,为零。
查询数据时,您可以执行以下操作:
select format(f6sp, (case when mod(f6sp, 1.0) < 0.1 then 0 else 1 end))MySQL (和一般的SQL )不允许将数字格式存储为列类型的一部分。
发布于 2015-07-28 07:31:25
数据库是用来存储数据的。应用程序用于格式化您从数据库中获得的内容。
SQL中提供了一些格式化工具;不要期望所有工具都可用。
https://stackoverflow.com/questions/31494475
复制相似问题