Переменная заполнения слева нулями в FORMATMESSAGE
Используя команду SQL Server FORMATMESSAGE, я печатаю сообщения о состоянии:
PRINT FORMATMESSAGE('Run time #%2d: From %s to %s', @i, CONVERT(VARCHAR(10), @from_date, 101), CONVERT(VARCHAR(10), @to_date, 101))
Это дает мне такой вывод:
Run time # 8: From 03/21/2019 to 04/21/2019
Run time # 9: From 04/21/2019 to 05/21/2019
Run time #10: From 05/21/2019 to 06/21/2019
Run time #11: From 06/21/2019 to 07/21/2019
Но как мне обнулить заполнение, если переменная @i меньше 10. Это дает мне две позиции, но я не могу определить символ, который нужно заполнить нулями.
3 ответа
Решение
Пытаться %0{# of digits}i
(%02i
) вот так:
Declare @i int = 2
PRINT FORMATMESSAGE('La La La: %02i', @i)
-- OUTPUT: 'La La La: 02'
Ваша строка:
PRINT FORMATMESSAGE('Run time #%02i: From %s to %s', @i, CONVERT(VARCHAR(10), @from_date, 101), CONVERT(VARCHAR(10), @to_date, 101))
ОБНОВЛЕНИЕ: похоже, что FormatMessage поддерживает больше параметров форматирования, и вы можете легко указать столько ведущих 0, сколько захотите:
PRINT FORMATMESSAGE('Run time #%02d: From %s to %s', @i, CONVERT(VARCHAR(10), @from_date, 101), CONVERT(VARCHAR(10), @to_date, 101))
Глядя на то, как Java решила мою проблему: первый 0 означает нулевое заполнение, а второе число - количество используемых столбцов.
Run time #%02d: From %s to %s
Возврат:
Run time #08: From 03/21/2019 to 04/21/2019
Run time #09: From 04/21/2019 to 05/21/2019
Run time #10: From 05/21/2019 to 06/21/2019
Run time #11: From 06/21/2019 to 07/21/2019
С помощью:
Run time #%-4d: From %s to %s
выравнивание по левому краю в четырех столбцах. Круто!