Буквенно-цифровые строки без нуля в sql

Я хотел бы добавить нули к буквенно-цифровой строке, если это одна цифра.

У меня есть что-то вроде:

CV-1-1А
CV-1-32
CV-12-24
CV-1-2
CV-1-2a

и я хотел бы изменить его на:

CV-01-01A
CV-01-32
CV-12-24
CV-01-02
CV-01-02A

1 ответ

Решение

LPAD может использоваться для заполнения нуля (или дополнения любым символом). Однако он не может работать внутри строки, поэтому требуется некоторая хитрость. Предполагая, что все ваши значения имеют формат a-b-c где a, b а также c строки длиной до 3 символов, вы можете использовать SUBSTRING_INDEX разбить нить на части, LPAD каждая часть индивидуально, и использовать CONCAT собрать их все вместе:

SELECT CONCAT(SUBSTRING_INDEX(col, '-', 1), 
       '-',
       LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(col, '-', 2), '-', -1), 2, '0'), 
       '-',
       LPAD(SUBSTRING_INDEX(col, '-', -1), 3, '0'))
FROM t;

Вот SQLFiddle с рабочим примером.

Другие вопросы по тегам