我有一张表,上面有一些值,
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).'-')
答案 0 :(得分:1)
一种方法是仅使用串联构建所需的最终字符串:
UPDATE certificate_log_uae
SET DeviceSerialNumberTemp = CONCAT(LEFT(DeviceSerialNumberTemp, 2),
'-',
SUBSTRING(DeviceSerialNumberTemp, 3, 3),
'-',
SUBSTRING(DeviceSerialNumberTemp, 6));
如果您使用的是MySQL 8+或更高版本,则有一个非常简单的基于正则表达式的解决方案,它使用REGEXP_REPLACE
:
SELECT
DeviceSerialNumberTemp,
REGEXP_REPLACE(DeviceSerialNumberTemp, '(.{2})(.{3})(.*)', '$1-$2-$3') AS output
FROM certificate_log_uae;
答案 1 :(得分:1)
Substr()
函数从输入字符串中的各个位置和长度处获取子字符串。-
的子串即可。尝试以下操作:
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
要更新值,请尝试:
update certificate_log_uae set
DeviceSerialNumberTemp = insert(insert(DeviceSerialNumberTemp , 3, 0, '-'), 7, 0, '-')