0

这个问题与另一个问题有关,我想在其中定义自定义 MySQL 列格式。问题在这里:如何强制执行自定义 MySQL 列格式

我想要的自定义格式始终是 2 位整数,后跟 # 符号,然后是空格,然后是小数点后 2 位的十进制数。允许值的示例如下:

30# 11.00
27# 17.25
40# 17.25

不允许的值是这样的:

30# 11
40# 20.5
27# 13

如您所见,不允许的值的问题基本上只是最后一个十进制数字缺少“。” 和尾随零。是否有一些更新语法可用于修复所有这些不正确的列值?基本上我只需要检查“#”之后的最后一个十进制数字是否有2个尾随十进制数字。如果没有,那么我想添加“。” 和尾随零。有谁知道UPDATE可以做到这一点的命令?

谢谢!

编辑

对一些评论的回答:是的,它是VARCHAR类型列。如果该值与我们想要的完全不同,那就别管它了。大多数问题都是我解释的,如果我可以通过一个查询解决所有问题,那么这是一个好的开始。

4

1 回答 1

2
update your_table
set some_column = case when len(some_column) = 6
                       then some_column + '.00'
                       when len(some_column) = 8
                       then some_column + '0'
                  end
where len(some_column) < 9;

这个例子

这里有一些更精确的语法,效果很好:

update your_table 
set some_column =
case 
    when length(some_column) = 6 
    then concat(some_column,".00") 
    when length(some_column) = 7
    then concat(some_column,"00") 
    when length(some_column) = 8
    then concat(some_column,"0") 
    else some_column 
end 
where some_column REGEXP '^[0-9][0-9]# [0-9][0-9]';
于 2012-06-19T14:59:27.460 回答