MySQL заменить символ другим - PullRequest
0 голосов
/ 30 октября 2018

У меня есть таблица с некоторыми значениями, как показано ниже,

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 голосов
/ 30 октября 2018
  • Вы можете использовать функцию Substr() для извлечения подстрок из вашей входной строки в различных позициях и длинах.
  • Поскольку длина последней подстроки не фиксирована; мы можем просто указать начальную позицию для среза подстроки и оставить указание параметра длины. Он будет рассматривать подстроку до конца всей строки.
  • Теперь просто объединяем эту подстроку обратно, используя - соответственно.

Попробуйте следующее:

UPDATE `certificate_log_uae` 
SET `DeviceSerialNumberTemp` = CONCAT(SUBSTR(`DeviceSerialNumberTemp`, 1, 2), 
                                      '-', 
                                      SUBSTR(`DeviceSerialNumberTemp`, 3, 3), 
                                      '-', 
                                      SUBSTR(`DeviceSerialNumberTemp`, 6)
                                     ) 
0 голосов
/ 30 октября 2018

Попробуйте простую 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, '-')
0 голосов
/ 30 октября 2018

Один из подходов состоит в том, чтобы просто создать последнюю строку, которую вы хотите, используя конкатенацию:

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

enter image description here

Демо

Если вы используете MySQL 8+ или новее, то существует очень простое решение на основе регулярных выражений, использующее REGEXP_REPLACE:

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

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...