mysql用另一个字符替换一个字符

5us2dqdw  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(421)

我有一张表,上面有一些值,如下所示,

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).'-')
xdnvmnnf

xdnvmnnf1#

试着简单一点 insert 功能:

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

演示
要更新值,请尝试:

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

s4n0splo2#

一种方法是只使用串联构建您想要的最终字符串:

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

演示

如果您使用的是mysql 8+或更高版本,那么有一个非常简单的基于regex的解决方案,使用 REGEXP_REPLACE :

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

演示

vnzz0bqm

vnzz0bqm3#

你可以用 Substr() 函数从输入字符串中获取不同位置和长度的子字符串。
因为最后一个子串的长度不是固定的;我们可以简单地指定分割子字符串的起始位置,而不指定length参数。它将考虑子字符串,直到整个字符串结束。
现在,只需使用 - 适当地。
请尝试以下操作:

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

相关问题