У меня есть поле INT в моей таблице, которое я хотел бы выбрать как нулевую строку. Так, например, 8 выйдет как 008
, 23 как 023
и так далее. Возможно ли это в запросе MySQL?
Есть ли эквивалент MySQL sprintf?
Ответ 1
Вы ищете функцию LPAD
:
SELECT LPAD(23, 3, '0'); -- '023'
Edit:
Как указано @Brad в комментариях, вы также можете определить столбец с ZEROFILL:
`foo` INT(3) ZEROFILL
Это всегда приводило бы к по меньшей мере 3-значным номерам (это означало бы, что цифры с нулевым числом меньше 3-х цифр, а не больше). Это полезно, если вам всегда нужны номера, которые выходят так (И не только в одном запросе)...
Ответ 2
В зависимости от версии mySql у вас есть, вы можете определить UDF, который будет форматировать значение для вас. см. http://dev.mysql.com/doc/refman/5.1/en/adding-functions.html.
Ответ 3
Если вы хотите достичь минимального количества отступов, не сокращая результаты больших чисел, вам нужно будет использовать оператор IF
.
В приведенном ниже примере убедитесь, что все идентификаторы имеют минимум три цифры, в то время как большие идентификаторы по-прежнему проходят через необработанные.
SELECT IF(id < 100, LPAD(id, 3, 0), id)