2012-06-19 33 views
0

此问题与另一个问题有关,我想定义一个自定义MySQL列格式。问题在这里:How to enforce custom MySQL column format将列更改为自定义格式的MySQL更新语法

我想要的自定义格式始终是一个2位数的整数,然后是#号,然后是空格,然后是小数点后的2位数的小数。允许值的例子是这样的:说不准

30# 11.00 
27# 17.25 
40# 17.25 

值是这样的:

30# 11 
40# 20.5 
27# 13 

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

谢谢!

编辑

回答一些评论的:是的,它是VARCHAR类型列。如果价值与我们想要的完全不同,那就把它放在一边。大部分问题都是我解释的,如果我可以用一个查询修复所有这些问题,那么这是一个好的开始。

+0

有可能是一个办法做到这一点在MySQL,但我会建议做数据操作您选择的编程语言,而不是它自己的商店。 – Qtax

+1

1-什么是列类型? VARCHAR? 2,你可以得到什么样的输入?如果有一个完全不相关的字符串(错误地)传入,会产生错误? – Sebas

+1

根据Qtax的说法,你不应该用MySQL来操纵你的数据,唯一的办法就是触发器,但是使用PHP(?)来完成它,你会得到你想要的任何东西。 – zessx

回答

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

如果你尝试'abcdefghi'?你仍然需要对待你的数据。 – zessx

+0

C @@ L,第一次看到SQL小提琴! –