Есть ли эквивалент MySQL sprintf?

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

3 ответов


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

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

Edit:

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

`foo` INT(3) ZEROFILL

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


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

в приведенном ниже примере убедитесь, что все идентификаторы имеют минимум три цифры, позволяя большим идентификаторам по-прежнему проходить через untrimmed.

SELECT IF(id < 100, LPAD(id, 3, 0), id)

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