mysql案例函数

时间:2013-01-11 17:29:34

标签: mysql

我有以下查询,它正在更新缺少hyphnes的MAC地址,但对于alerady拥有它们的其他人,它正在将它们更改为null。尝试更新一列中的值。

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;

任何建议都很棒。

由于

2 个答案:

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

答案 1 :(得分: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 '%-%'