Форматирование чисел путем заполнения начальными нулями в SQL Server - PullRequest
107 голосов
/ 01 марта 2012

У нас есть старая таблица SQL, которая использовалась SQL Server 2000 в течение почти 10 лет.

В ней наши значки сотрудников хранятся в виде char(6) от 000001 до 999999.

Я сейчас пишу веб-приложение, и мне нужно хранить номера значков сотрудников.

В моей новой таблице я могу взять короткий путь и скопировать старую таблицу, но я надеюсь,для лучшей передачи данных, меньшего размера и т. д., просто сохраняя значения int от 1 до 999999.

В C # я могу быстро отформатировать значение int для номера значка, используя

public static string GetBadgeString(int badgeNum) {
  return string.Format("{0:000000}", badgeNum);
  // alternate
  // return string.Format("{0:d6}", badgeNum);
}

Как бы я изменил этот простой запрос SQL для форматирования возвращаемого значения?

SELECT EmployeeID
FROM dbo.RequestItems
WHERE ID=0

Если EmployeeID равно 7135, этот запрос должен вернуть 007135.

Ответы [ 12 ]

1 голос
/ 06 сентября 2017

Решение работает для знаковых / отрицательных чисел с ведущими нулями для всех версий Sql:

DECLARE
    @n money = -3,
    @length tinyint = 15,
    @decimals tinyint = 0

SELECT REPLICATE('-', CHARINDEX('-', @n, 1)) + REPLACE(REPLACE(str(@n, @length, @decimals), '-', ''), ' ', '0')
0 голосов
/ 05 июня 2018

В моей версии SQL я не могу использовать REPLICATE.ТАК Я сделал это:

SELECT 
    CONCAT(REPEAT('0', 6-LENGTH(emplyeeID)), emplyeeID) AS emplyeeID 
FROM 
    dbo.RequestItems`
...