テーブルに2つのレコードを挿入しました。
create table num(id int)
insert into num values(0023)
insert into num values(23)
select * from num
クエリすると、すべてと表示され23
ます。つまり、SQL Serverは先頭の0を無視します。その背後にあるメカニズムは何ですか?SQL Serverで、挿入時に値を返すにはどうすればよいですか(つまり0023
、および23
)?
0023 0023が23または023または0000000023とは異なるものとしてデータベースにエンコードされることをどのように期待しますか?それらはすべて同じNUMBERを表します。また、intはNUMBERデータ型です。サーバーがこの「10進数のゼロの先行数」の値を格納する場所はありません。
—
ErikE
これは貧弱な質問であり、プログラミングクラスの紹介で取り上げられているでしょう。intの性質上、intは先行ゼロを格納できません。これは、任意の数のWebリソースを調べることで解決できます。これには、データベース管理者の入力は必要ありません。
—
jcolebrand
先行ゼロは暗示されます。代わりに文字列を使用する以外に、特定の数の先行ゼロが必要な場合、それはint列に格納されているものを超える追加情報です。1つのオプションは文字列列を使用することですが、別のオプションは、先行ゼロの数を別の列またはUIに格納することです。たとえば、UIが常に先頭にゼロを埋め込んで4桁にフォーマットする場合、この情報はUIに保存されています。ゼロの数を変化させてレコードごとに保持する必要がある場合は、代わりにその情報を別のフィールドに格納できます。
—
Dave Cousineau
id
、タイプVARCHAR
または類似のものでなければなりません。