我有以下查询,它正在更新缺少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;
任何建议都很棒。
由于
答案 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 '%-%'