2013-01-11 65 views
1

我有以下查詢,它正在更新MAC地址丟失hyphnes,但對於alerady擁有它的其他人,它正在改變它們爲null。嘗試更新一列中的值。mysql案例函數

UPDATE mytable SET MAC = 
CASE 
WHEN MAC NOT LIKE '%-%' 
    THEN UPPER(CONCAT(SUBSTR(MAC,1,2),'-', SUBSTR(MAC,3,2),'-', SUBSTR(MAC,5,2),'-', SUBSTR(MAC,7,2),'-', SUBSTR(MAC,9,2),'-', SUBSTR(MAC,11,2))) 
END; 

任何建議woild be great。

感謝

回答

3

只需添加一個ELSE情況下,它的值設置爲它的當前值:

UPDATE mytable SET MAC = 
CASE 
WHEN MAC NOT LIKE '%-%' 
    THEN UPPER(CONCAT(SUBSTR(MAC,1,2),'-', SUBSTR(MAC,3,2),'-', SUBSTR(MAC,5,2),'-', SUBSTR(MAC,7,2),'-', SUBSTR(MAC,9,2),'-', SUBSTR(MAC,11,2))) 
    /* Else case sets it to its current value to avoid NULL */ 
    ELSE MAC 
END; 

它也可以使用WHERE子句,以便不應該更新行不匹配第一名。這可能是更多的採取適當的措施在這種情況下,除非你有其他狀況,在CASE

UPDATE mytable 
SET MAC = UPPER(CONCAT(SUBSTR(MAC,1,2),'-', SUBSTR(MAC,3,2),'-', SUBSTR(MAC,5,2),'-', SUBSTR(MAC,7,2),'-', SUBSTR(MAC,9,2),'-', SUBSTR(MAC,11,2))) 
WHERE MAC NOT LIKE '%-%' 
+0

申請謝謝你的工作。 –

1
UPDATE mytable 

SET MAC = UPPER(CONCAT(SUBSTR(MAC,1,2),'-', SUBSTR(MAC,3,2),'-', SUBSTR(MAC,5,2),'-', SUBSTR(MAC,7,2),'-', SUBSTR(MAC,9,2),'-', SUBSTR(MAC,11,2))) 

WHERE MAC NOT LIKE '%-%'