Есть ли в MySQL эквивалент sprintf? - PullRequest
17 голосов
/ 04 января 2011

В моей таблице есть поле INT, которое я хотел бы выбрать как строку с нулевым заполнением.Так, например, 8 получится как 008, 23 как 023 и так далее.Возможно ли это в запросе MySQL?

Ответы [ 3 ]

28 голосов
/ 04 января 2011

Вы ищете функцию LPAD:

SELECT LPAD(23, 3, '0'); -- '023'

Редактировать:

Как указано @Brad вВ комментариях вы также можете определить столбец с помощью ZEROFILL:

`foo` INT(3) ZEROFILL

Это всегда будет производить по крайней мере 3-значные числа (это будет числа с нуля меньше 3-х цифр, и не повлиять на них больше)Это полезно, если вам всегда нужны такие цифры (а не только в одном запросе) ...

1 голос
/ 01 февраля 2013

Если вы хотите достичь минимального количества отступов, не обрезая результаты больших чисел, вам нужно использовать оператор IF.

В приведенном ниже примере все идентификаторы будут иметь не менее трех цифр, а большие идентификаторы будут проходить без полей.

SELECT IF(id < 100, LPAD(id, 3, 0), id)
0 голосов
/ 04 января 2011

В зависимости от версии mySql, которую вы имеете, вы можете определить UDF, который будет форматировать значение для вас. см http://dev.mysql.com/doc/refman/5.1/en/adding-functions.html.

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