Переменная заполнения слева нулями в FORMATMESSAGE - PullRequest
0 голосов
/ 25 сентября 2019

Используя команду 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 ]

1 голос
/ 25 сентября 2019

ОБНОВЛЕНИЕ : похоже на FormatMessage поддерживает больше параметров форматирования, и вы можете легко указать столько начальных 0, сколько вам нужно:

PRINT FORMATMESSAGE('Run time #%02d: From %s to %s', @i, CONVERT(VARCHAR(10), @from_date, 101), CONVERT(VARCHAR(10), @to_date, 101))
0 голосов
/ 25 сентября 2019

Посмотрим, как 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

выравнивание по левому краю в четырех столбцах.Круто!

0 голосов
/ 25 сентября 2019

Попробуйте %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))
...