这个问题与另一个问题有关,我想定义一个自定义的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
类型列。如果价值与我们想要的完全不同,那就别管它了。大多数问题都是我解释的问题,如果我能用一个查询解决所有这些问题,那么这是一个好的开始。
答案 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]';