it-swarm.asia

كيف أحافظ على الأصفار البادئة عند إدراج رقم في هذا الجدول؟

لقد أدخلت سجلين في جدول.

create table num(id int)
insert into num values(0023)
insert into num values(23)
select * from num

عندما أستعلم عنها ، يتم عرضها جميعًا كـ 23. هذا يعني أن SQL Server يتجاهل 0s البادئة. ما هي الآلية وراء ذلك؟ كيف يمكنني أن أجعل SQL Server يعيد القيم كما أدرجتها (أي 0023 و 23

10
user8365

0023 ليس رقمًا. إنها سلسلة. 23 هو الرقم. SQL Server قادر على إدراك أن هذه الأصفار الإضافية ليست ضرورية لتحديد الرقم ، لذلك يتجاهلها. إذا كنت تريد تشتيت القيمة إلى 0023 للتطبيق ، فإنني أقترح إجراء التنسيق على جانب التطبيق. وبهذه الطريقة ، يظل الرقم المخزن في SQL Server رقمًا إذا كنت تريد إضافة أو تجميع أو حسابات أخرى. إذا كان عليك فعلاً تخزينه كـ '0023' ، فأنت بحاجة إلى تحويله إلى حقل حرف ؛ تشار ، فارشار ، نفارشار ، نشار.

27
Grant Fritchey

قيل بالفعل في إجابات أخرى أن 00023 هو رقم ؛ أريد فقط أن أضيف أنه يمكنك استخدام الأعمدة المحسوبة لإظهار هذا الرقم باستخدام تنسيق مخصص. فمثلا،

create table num_table(id int not null primary key identity(1,1),
num int, leading_zeros smallint,
constraint chk_leading_zero_nonnegative check (leading_zero>=0),
num_formatted as replicate('0',coalesce(leading_zeros,0)) +cast(num as varchar(10)));
insert into num_table(num,leading_zeros) values(23,2) ;
select num_formatted from num_table; -- output '0023'
5
a1ex07

0023 هو رقم ولكن أنواع البيانات العددية والأرقام الأخرى لا تخزن أصفارًا رائدة نظرًا لعدم وجود سبب رياضي للقيام بذلك.

إذا كنت بحاجة إلى تخزين الأصفار البادئة ، فاستخدم نوع بيانات السلسلة مثل char و varchar إلخ

0
Jimbo