2012-06-19 35 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小提琴! –