使用ROUND mysql的UPDATE语句

时间:2015-07-18 18:53:34

标签: mysql regex select sql-update

我遇到问题,我需要使用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.$'

由于

3 个答案:

答案 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中提供了一些格式化工具;不要指望一切都可用。