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

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

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

CV-1-1A
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


person Artour    schedule 20.11.2013    source источник


Ответы (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 с рабочим примером.

person Mureinik    schedule 20.11.2013