テーブルの列を ID としてマークしました
create table Identitytest(
number int identity(1,001) not null,
value varchar(500)
)
001,002,003
などのように ID 列をインクリメントする必要があります。
1,2,3
データベースは、などとして挿入していることを示しています。
これはどのように行うことができますか?
テーブルの列を ID としてマークしました
create table Identitytest(
number int identity(1,001) not null,
value varchar(500)
)
001,002,003
などのように ID 列をインクリメントする必要があります。
1,2,3
データベースは、などとして挿入していることを示しています。
これはどのように行うことができますか?
他の人がすでに正当に指摘しているように-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 によって自動的に増加されます。また、表示形式を好きなように定義して、いつでも利用できるようにすることができます。
number
先頭にゼロを付けて列を表示したい場合は、SELECT
ステートメントに埋め込むだけです。これは数値であり、先行ゼロを整数として格納することはありません。
SELECT RIGHT('00000' + CAST([number] AS varchar(5)) , 3)
FROM IdentityTest
は3
、出力表示で合計したい文字数です。
自動インクリメント数値 (数値のみ) と数値のアルファベット表記の両方が必要な場合は、計算列を検討することを検討してください。
以下にいくつかのリンクを示します。
なぜそれが必要なのですか?整数として、001 は 1 と同じです。表示またはその他の目的で必要な場合は、別の列を作成し、そこで作業を行います (挿入時にテーブルのトリガーの一部として行うことができます)。新しく挿入された行で、列にエントリを適切に作成します。
整数を格納しているテーブルがありますが、ユーザーはそれがゼロであっても XXX を見たいと思っているので、このコードを書きました
declare @a int
set @a=1
select replicate('0',3-len(@a))+ cast(@a as varchar(4))
別の方法を次に示します。
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
テーブルに列を追加するほどデータの重複(?)が少なく、選択ステートメントで列を指定する必要はありません。
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)
、データベースから読み取るプログラムのようなものです。