1

intテーブルに、別の列の先頭にゼロを追加する計算列があります。以下を使用します。

client_id AS RIGHT('00000' + CAST(id AS nvarchar(5)) , 5) PERSISTED NOT NULL

基本的に、 を に変換し、id先頭NVARCHAR(5)に を追加してから00000、右端の 5 文字を取得します。これはうまく機能しますが、ID 番号が 99999 (つまり 6 桁) より大きい場合、最初の桁が削除されます。これは予期されていることですが、望ましくありません。

別の列 ( ) から数値を取得し、数値が 99999 より大きい場合を除き、id次の形式を強制する計算列を作成するにはどうすればよいですか?00000

例:

 00001  
 00002  
 00003  
 ..   
 00010  
 00100  
 01000  
 99999   
 ..   
100000  
100001

ありがとうございます。紛らわしいタイトルで申し訳ありません。

4

3 に答える 3

1

次に、次を使用しますCASE

SELECT client_id = CASE 
                 WHEN id > 99999 THEN id 
                 ELSE RIGHT('00000' + CONVERT(VARCHAR, id), 5) 
               END 
FROM   dbo.table1 

デモ

... charncharは固定長であり、指定した文字数のストレージ スペースをすべて使用しなくても確保されることに注意してください。しかし varchar、 とnvarchar可変長で、格納する文字のスペースのみを使用します。char や nchar のようなストレージは予約されません

于 2013-06-11T21:18:31.177 に答える
1

CASE数値が 10000 未満の場合にのみ、ステートメントを使用してゼロを先頭に追加できます。

client_id AS (
    case when [id] < 100000
    then right('00000'+convert([nvarchar](20), [id]), 5) 
    else convert([nvarchar](20), [id]) end) PERSISTED NOT NULL

上記を使用しnvarchar(20)ますが、適切な長さを使用する必要があります。

于 2013-06-11T21:24:11.020 に答える
1
DECLARE @p TABLE (id INT)

INSERT INTO @p
select 1 UNION
SELECT 100 union
SELECT 100000 UNION
SELECT 1000000

SELECT ISNULL( REPLICATE('0', 5 - LEN(p.id)), '') + LTRIM(RTRIM(CAST(ISNULL(p.id, 0) AS NVARCHAR(MAX))))
FROM @p p

結果

(4 row(s) affected)

00001
00100
100000
1000000
于 2013-06-11T21:33:02.220 に答える