2016-09-14 8 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

キーワードは「パディング」です。http://stackoverflow.com/questions/16760900/pad-a-string-with-leading-zeros-so-its-3-characters-long-in-sql-サーバー - 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'関数の2番目のパラメータは、取得したい文字列の最終的な長さです。たとえば、PINを15文字にしたい場合は、「000 ... 000」の文字列を15文字分長くし、両方を「10」から「15」に変更します。 –

1

使用複製/ 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

私はDeclareで1つのテンポラリテーブルを定義してあり、データの例を –

+0

ありがとうございます。私は、VARCHARデータ型の使用は、通常、先行ゼロを保持すると思った – optimisteve

関連する問題