8

テーブルの列を ID としてマークしました

create table Identitytest(
    number int  identity(1,001) not null,
    value varchar(500)
)

001,002,003などのように ID 列をインクリメントする必要があります。

1,2,3データベースは、などとして挿入していることを示しています。

これはどのように行うことができますか?

4

7 に答える 7

15

他の人がすでに正当に指摘しているように-INTには先行ゼロがありません-値を保持するだけです.それだけです(そしてそれは良いことです).

追加の書式設定が必要な場合は、次のような計算列をいつでもテーブルに追加できます。

ALTER TABLE dbo.Identitytest
  ADD DisplayNumber AS  RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED

このように、あなたの INT IDENTITY は INT として使用され、常に数値をDisplayNumber含みますが001, 002, ... 014, 015, .....、自動的に常に最新の状態になります。

これは永続フィールドであるため、テーブルの一部になり、クエリを実行したり、クエリを高速化するためにインデックスを配置したりすることもできます。

SELECT value FROM dbo.IdentityTest WHERE DisplayNumber = '024'

そしてもちろん、計算列の定義ではほぼすべてのフォーマットを使用できるため、接頭辞などを追加することもできます。

ALTER TABLE dbo.Identitytest
  ADD DisplayNumber 
      AS  'ABC-' + RIGHT('000' + CAST(number AS VARCHAR(3)) , 3) PERSISTED

したがって、この場合、あなたDisplayNumberはそうなるでしょうABC-001, ABC-002, ...

両方の長所を活用できます。INT IDENTITY は数値であり、SQL Server によって自動的に増加されます。また、表示形式を好きなように定義して、いつでも利用できるようにすることができます。

于 2010-08-07T06:52:31.540 に答える
6

number先頭にゼロを付けて列を表示したい場合は、SELECTステートメントに埋め込むだけです。これは数値であり、先行ゼロを整数として格納することはありません。

SELECT RIGHT('00000' + CAST([number] AS varchar(5)) , 3)
FROM IdentityTest

3、出力表示で合計したい文字数です。

于 2010-08-07T06:10:11.197 に答える
3

自動インクリメント数値 (数値のみ) と数値のアルファベット表記の両方が必要な場合は、計算列を検討することを検討してください。

以下にいくつかのリンクを示します。

于 2010-08-07T06:51:32.260 に答える
2

なぜそれが必要なのですか?整数として、001 は 1 と同じです。表示またはその他の目的で必要な場合は、別の列を作成し、そこで作業を行います (挿入時にテーブルのトリガーの一部として行うことができます)。新しく挿入された行で、列にエントリを適切に作成します。

于 2010-08-07T05:52:42.347 に答える
1

整数を格納しているテーブルがありますが、ユーザーはそれがゼロであっても XXX を見たいと思っているので、このコードを書きました

declare @a int
set @a=1


select replicate('0',3-len(@a))+ cast(@a as varchar(4))
于 2010-08-09T13:55:31.027 に答える
1

別の方法を次に示します。

create table TEST_T (ui int NOT NULL identity, name varchar(10))
insert into TEST_T values ( 'FRED' )
select NAME, ui, RIGHT('0000' + LTRIM(STR(ui)), 4) as ui_T from TEST_T
go
/* NOTE: A view could be created with a calculated column instead of the identity column. */
create view TEST_V as select NAME, RIGHT('0000' + LTRIM(STR(ui)), 4) as ui_V from TEST_T go
go
select * from TEST_V
drop view TEST_V
drop table TEST_T

テーブルに列を追加するほどデータの重複(?)が少なく、選択ステートメントで列を指定する必要はありません。

于 2011-10-13T10:15:54.757 に答える
0

ID 列を 001,002,003 などのようにインクリメントする必要があります。

データベースは、1、2、3 などとして挿入していることを示しています。

SQL データベースは、それらの値を書き込むために使用したリテラルではなく、値を格納します。 002 is 2. is 2 と同じ1 + 1 ですSELECT 1 + 1。2 の代わりに文字列 "1 + 1" を表示すると思いますか?

先頭のゼロを列に格納する場合は、文字型を使用する必要があります。AUTOINCREMENTただし、 /は使用できませんIDENTITY

おそらく本当に欲しいのはprintf("%03d", number)、データベースから読み取るプログラムのようなものです。

于 2010-08-07T07:03:11.473 に答える