按照我们的格式更新列值

时间:2012-12-26 10:00:31

标签: mysql

我的Db中有两种类型的记录,例如MS-NWCS在表DICIPLINE 我希望包裹的CS表中(任何两个类似CS,TE或类似的字符串)然后将其包装到BS(CS)(OR BS(TE)ETC)或如果其MS-NW(或MS-CS,MS-TE等)然后将其从列dicipline包装到MS(NW)。

我成功更新了两个字符串,以下是查询,请告诉我如何为MS-NW OR MS-CS之类的值执行此操作,并将其转换为以下查询中的MS(NW)格式。< / p>

UPDATE DEG set DICIPLINE =  concat("BS(",DICIPLINE,")") where CHAR_LENGTH(DICIPLINE) = 2

2 个答案:

答案 0 :(得分:2)

以下查询可帮助您更新数据。

update deg set DISIPLINE = if(length(DISIPLINE)= 2,concat('BC(',DISIPLINE,')')
                                     ,concat('MS(',substr(DISIPLINE, 4,4),')'));

See Sqlfiddle demo.

答案 1 :(得分:1)

为安全起见,请创建相同类型的临时列并执行如下更新:

UPDATE deg
SET dicipline_temp = CASE
    WHEN CHAR_LENGTH(dicipline) = 2
        THEN CONCAT('BS(', dicipline, ')')
    WHEN CHAR_LENGTH(dicipline) = 5 AND SUBSTRING(dicipline, 3, 1) = '-'
        THEN CONCAT(REPLACE(dicipline, '-', '('), ')')
END
WHERE CHAR_LENGTH(dicipline) = 2 OR (CHAR_LENGTH(dicipline) = 5 AND SUBSTRING(dicipline, 3, 1) = '-')

如果结果可以接受,请更新实际列。