首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用循环mysql的UPDATE语句

问使用循环mysql的UPDATE语句
EN

Stack Overflow用户
提问于 2015-07-19 02:53:34
回答 3查看 1.5K关注 0票数 0

我遇到了一个问题,我需要使用四舍五入将列舍入到小数点后一位。它与SELECT语句一起工作,我可以让FORMAT与SELECT语句一起工作,但我不能让它与UPDATE语句一起工作,这是我需要使用它的原因。下面是我的代码:

代码语言:javascript
复制
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来查找十进制值为零的位置。以下是我对此的声明:

代码语言:javascript
复制
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表达式之间添加两个句点,但仍然得到一个空集。

代码语言:javascript
复制
WHERE F6sp REGEXP '.period..zero.$'

谢谢

EN

回答 3

Stack Overflow用户

发布于 2015-07-19 02:57:03

好吧,不使用REGEXP:

代码语言:javascript
复制
UPDATE _TransRecords 
SET F6sp = ROUND(F6sp) 
WHERE INSTR(F6sp,'.0')>0;

应该做这件事。

票数 0
EN

Stack Overflow用户

发布于 2015-07-19 03:24:46

您不能对decimal列执行您想要的操作。小数位数由类型决定,而不是值。所以,你只会得到0.00000,为零。

查询数据时,您可以执行以下操作:

代码语言:javascript
复制
select format(f6sp, (case when mod(f6sp, 1.0) < 0.1 then 0 else 1 end))

MySQL (和一般的SQL )不允许将数字格式存储为列类型的一部分。

票数 0
EN

Stack Overflow用户

发布于 2015-07-28 07:31:25

数据库是用来存储数据的。应用程序用于格式化您从数据库中获得的内容。

SQL中提供了一些格式化工具;不要期望所有工具都可用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31494475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档