MySQL更新语法将列转换为自定义格式

时间:2012-06-19 14:56:07

标签: mysql regex custom-formatting

这个问题与另一个问题有关,我想定义一个自定义的MySQL列格式。问题在于:How to enforce custom MySQL column format

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

30# 11.00
27# 17.25
40# 17.25

不允许的值是这样的:

30# 11
40# 20.5
27# 13

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

谢谢!

编辑

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

1 个答案:

答案 0 :(得分: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;

请参阅this example

这里有一些非常精确的语法:

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]';