2016-09-14 2 views
1

Я генерирую несколько номеров выводов в инкрементальном порядке, используя приведенный ниже сценарий, и хотел бы включить ведущий нуль. Попробовал все виды данных и, кажется, терял начальный ноль. Был бы признателен за помощь здесь ОБНОВЛЕНИЕ мой столДобавление/сохранение начального нуля при обновлении столбца

WITH PIN_NO 
AS 
(
    SELECT 4310 + ROW_NUMBER() OVER(ORDER BY Firstname, Lastname) NEW_PIN, * 
    FROM Citizen 
) 

UPDATE PIN_NO 
SET PIN = CAST(NEW_PIN AS VARCHAR(10)) 

имя таблицы: Гражданин

Firstname  Lastname PINOO  Address Age other columns.... 
John    Smith    20001  19 
Andrew   Evans    363252 30 
Bill    Towny    63322  67 
Dame    Beaut    34222  34 

бы хотелось, чтобы быть

Firstname  Lastname PINOO  Address Age other columns.... 
John    Smith  04310 20001  19 
Andrew   Evans  04311 363252  30 
Bill    Towny  04312 63322  67 
Dame    Beaut  04313 34222  34 

Любая другая соответствующая скрипт поможет. Спасибо

+2

Каков тип 'PIN00'? –

+1

ключевое слово «padding», посмотрите на http://stackoverflow.com/questions/16760900/pad-a-string-with-leading-zeros-so-its-3-characters-long-in-sql- server-2008 для ответа – swe

ответ

4

Подготовьте число с достаточным количеством нулей и используйте RIGHT, чтобы усечь его до нужной длины.

WITH PIN_NO 
AS 
(
    SELECT 4310 + ROW_NUMBER() OVER(ORDER BY Firstname, Lastname) NEW_PIN, * 
    FROM Citizen 
) 
UPDATE PIN_NO 
SET PIN = RIGHT('0000000000' + CAST(NEW_PIN AS VARCHAR(10)), 10) 
+0

работает как шарм ... спасибо V! «10» в конце сценария, какова цель этого? – optimisteve

+1

@optimisteve, последний '10', второй параметр функции« RIGHT »- это конечная длина строки, которую вы хотите получить. Например, если вы хотите, чтобы ваш ПИН составлял 15 символов, сделайте '' 000 ... 000'' строку длиной 15 символов и измените оба значения '10' на' 15'. –

1

Использование Replicate/RIGHT Функция:

Ниже пример может помочь вам:

DECLARE @tbl1 AS TABLE 
(
    ITEM_NBR VARCHAR(5), 
    GRP_NBR VARCHAR(5) 
) 

INSERT INTO @tbl1 VALUES('0001',221) 
INSERT INTO @tbl1 VALUES('0002',221) 
INSERT INTO @tbl1 VALUES('0003',221) 

REPLICATE:

SELECT 
    REPLICATE 
    (
     '0', 
     4-LEN(MAX(CAST(ITEM_NBR  as INT))) 
    ) + 
    CAST(MAX(CAST(ITEM_NBR  as INT))+1 AS VARCHAR(5)) 
FROM @tbl1 
GROUP BY GRP_NBR 

ПРАВО:

SELECT 
    RIGHT 
    (
     (
      '00000000000' 
      + 
      CAST(MAX(CAST(ITEM_NBR as INT))+1 AS VARCHAR(5)) 
     ) , 
     4 
    ) 
FROM @tbl1 
GROUP BY GRP_NBR 
+0

Привет и спасибо Сандип. Какая польза/необходимость DECLARE в скрипте. – optimisteve

+0

Я определил одну временную таблицу с объявлением и даю вам пример с данными –

+0

спасибо всем. Я думал, что использование типа данных VARCHAR обычно сохранит начальный нуль – optimisteve

Смежные вопросы