我遇到问题,我需要使用ROUND将列舍入到一个小数位。它使用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
和众多stackoverflow问题,它还没有帮助。我虽然没有在我的陈述中收到错误消息。 REGEXP只是返回一个空集。
我还尝试在正则表达式之间添加两个句点,但我仍然得到一个空集。
WHERE F6sp REGEXP '.period..zero.$'
由于
答案 0 :(得分:0)
好的,不使用REGEXP:
UPDATE _TransRecords
SET F6sp = ROUND(F6sp)
WHERE INSTR(F6sp,'.0')>0;
应该这样做。
答案 1 :(得分:0)
使用decimal
列无法执行所需操作。小数位数由类型而不是值确定。所以,你只需得到0.00000,为零。
查询数据时,您可以执行以下操作:
select format(f6sp, (case when mod(f6sp, 1.0) < 0.1 then 0 else 1 end))
MySQL(以及一般的SQL)不允许您将数字格式存储为列类型的一部分。
答案 2 :(得分:0)
数据库用于存储数据。应用程序用于格式化从数据库获取的内容。
SQL中提供了一些格式化工具;不要指望一切都可用。