mysql用另一个替换字符

时间:2018-10-30 07:03:36

标签: mysql sql sql-update

我有一张表,上面有一些值,

Slno
---------
IFAAA1121
IFAAA1122
IMBBB1121
IMBBB11223

我的目标是将SlNo重新格式化为以下格式,

Slno
---------
IF-AAA-1121
IF-AAA-1122
IM-BBB-1121
IM-BBB-11223

怎么可能?

我的查询是:

UPDATE `certificate_log_uae` 
SET `DeviceSerialNumberTemp` = REPLACE(LEFT(DeviceSerialNumberTemp,2),
                                       LEFT(DeviceSerialNumberTemp,2).'-')

3 个答案:

答案 0 :(得分:1)

一种方法是仅使用串联构建所需的最终字符串:

UPDATE certificate_log_uae
SET DeviceSerialNumberTemp = CONCAT(LEFT(DeviceSerialNumberTemp, 2),
                                    '-',
                                    SUBSTRING(DeviceSerialNumberTemp, 3, 3),
                                    '-',
                                    SUBSTRING(DeviceSerialNumberTemp, 6));

enter image description here

Demo

如果您使用的是MySQL 8+或更高版本,则有一个非常简单的基于正则表达式的解决方案,它使用REGEXP_REPLACE

SELECT
    DeviceSerialNumberTemp,
    REGEXP_REPLACE(DeviceSerialNumberTemp, '(.{2})(.{3})(.*)', '$1-$2-$3') AS output
FROM certificate_log_uae;

Demo

答案 1 :(得分:1)

  • 您可以使用Substr()函数从输入字符串中的各个位置和长度处获取子字符串。
  • 由于最后一个子字符串的长度不固定;我们可以简单地指定切片子字符串的开始位置,而保留指定length参数。它将考虑子字符串直到整个字符串的结尾。
  • 现在,只需concatenate个适当地使用-的子串即可。

尝试以下操作:

UPDATE `certificate_log_uae` 
SET `DeviceSerialNumberTemp` = CONCAT(SUBSTR(`DeviceSerialNumberTemp`, 1, 2), 
                                      '-', 
                                      SUBSTR(`DeviceSerialNumberTemp`, 3, 3), 
                                      '-', 
                                      SUBSTR(`DeviceSerialNumberTemp`, 6)
                                     ) 

答案 2 :(得分:1)

尝试简单的insert函数:

select Slno, insert(insert(slno, 3, 0, '-'), 7, 0, '-') from tbl

Demo

要更新值,请尝试:

update certificate_log_uae set
DeviceSerialNumberTemp = insert(insert(DeviceSerialNumberTemp , 3, 0, '-'), 7, 0, '-')