আমি এই টেবিলটিতে একটি নম্বর sertোকানোর সময় আমি কীভাবে নেতৃস্থানীয় শূন্যগুলি সংরক্ষণ করব? [বন্ধ]


10

আমি একটি টেবিলে দুটি রেকর্ড haveোকিয়েছি।

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

আমি যখন তাদের জিজ্ঞাসা করি তখন তারা সকলে হিসাবে প্রদর্শিত হয় 23। এর অর্থ এসকিউএল সার্ভার নেতৃস্থানীয় 0 টি উপেক্ষা করে। এর পিছনে কী ব্যবস্থা আছে? আমি কীভাবে এসকিউএল সার্ভারকে মানগুলি inোকানোর সাথে সাথে ফেরত দিতে পারি (যেমন 0023এবং 23)?


2
আপনি কেন নেতৃস্থানীয় শূন্যগুলি সম্পর্কে যত্নশীল হন? এগুলি যদি আপনার সিস্টেমে অর্থবোধক হয় তবে idতা জাতীয় VARCHARবা অনুরূপ হওয়া উচিত ।
নিক চ্যামাস

আপনি কীভাবে 0023 এর 23 বা 023 বা 0000000023 এর থেকে আলাদা হিসাবে ডেটাবেজে এনকোড হওয়ার আশা করছেন? তারা সকলেই একই নম্বর উপস্থাপন করে। এবং int হ'ল একটি ডেটা টাইপ। এই "দশমিক শূন্যের শীর্ষস্থানীয় সংখ্যা" মান সঞ্চয় করার জন্য সার্ভারের কোনও স্থান নেই।
এরিক

এটি একটি দুর্বল প্রশ্ন, এবং প্রোগ্রামিং ক্লাসের কোনও পরিচিতিতে আচ্ছাদিত হত। অন্তর্নিহিত প্রকৃতির কারণে কোনও প্রারম্ভিক জিরোগুলি কখনই সঞ্চয় করতে পারে না। যেকোন সংখ্যক ওয়েব সংস্থান দেখে এটি সমাধান করা যেতে পারে। এটিতে ডাটাবেস প্রশাসকের ইনপুট লাগবে না।
jcolebrand

1
শীর্ষস্থানীয় শূন্যগুলি নিহিত রয়েছে। তার পরিবর্তে একটি স্ট্রিং ব্যবহারের পাশাপাশি, যদি আপনার নির্দিষ্ট সংখ্যক শীর্ষস্থানীয় শূন্যের প্রয়োজন হয় তবে এটি কোনও ইন কলামে সঞ্চিত রয়েছে তার বাইরে অতিরিক্ত তথ্য। একটি বিকল্প একটি স্ট্রিং কলাম ব্যবহার করছে, তবে অন্য বিকল্পটি অন্য কোনও কলামে বা ইউআইতে নেতৃস্থানীয় শূন্যের সংখ্যা সঞ্চয় করছে। উদাহরণস্বরূপ, যদি ইউআই সর্বদা প্যাডিং নেতৃস্থানীয় শূন্যগুলি সহ 4 টি সংখ্যায় ফর্ম্যাট করে তবে আপনি এই তথ্যটি UI তে সংরক্ষণ করেছেন। যদি আপনার প্রতিটি রেকর্ডের জন্য আলাদা আলাদা হয়ে ও সংরক্ষণ করার জন্য # শূন্যের প্রয়োজন হয় তবে আপনি সেই তথ্যটি পরিবর্তে একটি পৃথক ক্ষেত্রে সংরক্ষণ করতে পারেন।
ডেভ কাজিনো

উত্তর:


27

0023একটি সংখ্যা নয়। এটি একটি স্ট্রিং। 23সংখ্যাটি এসকিউএল সার্ভারটি সনাক্ত করতে সক্ষম হয়েছে যে নম্বরটি সংজ্ঞায়িত করার জন্য এই অতিরিক্ত শূন্যগুলির প্রয়োজন নেই, তাই এটি তাদের উপেক্ষা করে। আপনি যদি অ্যাপ্লিকেশনটিতে 0023 হিসাবে কোনও মান প্রকাশ করতে চান তবে আমি অ্যাপ্লিকেশনটির পক্ষে বিন্যাসটি করার পরামর্শ দিচ্ছি। আপনি সংযোজন, সমষ্টি বা অন্যান্য গণনা করতে চাইলে এসকিউএল সার্ভারে সঞ্চিত নম্বরটি এখনও একটি সংখ্যা। আপনার যদি সত্যিই এটি ' 0023' হিসাবে সংরক্ষণ করতে হয় তবে আপনার এটিকে একটি অক্ষর ক্ষেত্রে রূপান্তর করতে হবে; চর, বারচর, এনভারচর, এনচার


যদি 0023 স্ট্রিং হয়, আমি আইডিটি ইন্ট ফর্ম্যাট হিসাবে সংজ্ঞায়িত করেছি যে টেবিলের মধ্যে মানটি কীভাবে সন্নিবেশ করব?
ব্যবহারকারীর 3865

@ ব্যবহারকারী 65৩6565 - হয় idহিসাবে সংজ্ঞায়িত করুন VARCHARবা কেবল 0023 এর পরিবর্তে 23 সন্নিবেশ করুন
লামাক

5
@ user8365 - আপনি যদি জিজ্ঞাসা করছেন যে আপনি এসকিউএল সার্ভারকে সেই ক্ষেত্রের ডোমেন অখণ্ডতা লঙ্ঘন করতে পারেন কিনা । আপনি পারবেন না। যদি 0023স্ট্রিং হয় তবে স্ট্রিং হিসাবে স্টোর করুন। যদি তা না হয় তবে এটি একটি INT হিসাবে সংরক্ষণ করুন এবং নেতৃস্থানীয় শূন্যগুলি ভুলে যান।
নিক চ্যামাস

@ নিক চ্যামমাস ঠিক কী বলেছে। আপনার এখানে কোনও পছন্দ নেই। 23 একটি সংখ্যা, 0023 একটি স্ট্রিং। আপনি যদি একটি নম্বর চান, এটি একটি সংখ্যা হিসাবে আচরণ করুন। আমার উত্তরটির মতো, এটি যদি একটি সংখ্যার মতো বাছাই, সংযোজন, বিয়োগ, গুণ, ভাগ ইত্যাদি প্রয়োজন হয় তবে এটির একটি সংখ্যা হওয়া দরকার। কোনও পছন্দ নেই। কোন যুক্তি নেই। শীর্ষস্থানীয় শূন্যগুলি কেবল ফর্ম্যাট করা। অ্যাপ কোডে বা অন্য কোথাও তা করুন।
গ্রান্ট ফ্রেঞ্চে

@ গ্রান্ট আমি সম্মতি দিতে পারি না যে শীর্ষস্থানীয় শূন্যগুলি কেবল ফর্ম্যাট করছে। এগুলি যে কোনও সংখ্যা পদ্ধতিতে বৈধ; তবে, 0023b10 = 23 বি 10; সুতরাং, কোনও স্টোরেজ সিস্টেম সমস্ত নেতৃস্থানীয় শূন্যগুলি এনকোড না করে কিছুটা সংক্ষেপণ লাভ করে। সুতরাং, মৌলিকভাবে আমাদের প্রশ্নকর্তা ভুল প্রশ্ন জিজ্ঞাসা করছেন। কেন 0023 পূর্ণসংখ্যা নয়? এটি একটি পূর্ণসংখ্যা! এটিকে উপস্থাপন করার জন্য আমাদের কেবল শীর্ষস্থানীয় অঙ্কগুলির একটি অনন্তর এনকোড করার দরকার নেই।
আউটআউয়ার

5

এটি ইতিমধ্যে অন্যান্য উত্তরে বলা হয়েছিল যে 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'

ভাল পয়েন্ট, একেবারে লক্ষণীয়।
গ্রান্ট ফ্রেঞ্চে

0

0023 একটি সংখ্যা তবে অন্তর্নিহিত এবং অন্যান্য সংখ্যার ডেটা টাইপ নেতৃস্থানীয় জিরো সংরক্ষণ করে না কারণ এটি করার কোনও গাণিতিক কারণ নেই।

আপনার যদি নেতৃস্থানীয় শূন্যগুলি সঞ্চয় করতে হয় তবে স্ট্রিং ডেটা টাইপ যেমন, চর, বারচর ইত্যাদি ব্যবহার করুন


1
যদি আমরা ধরে নিই যে INTস্থির দৈর্ঘ্য (32 বিটের মতো) এবং বাইনারি সংকেতগুলি সংরক্ষণের জন্য ব্যবহার করা হয়, তবে নেতৃস্থানীয় শূন্যগুলি অবশ্যই সংরক্ষিত থাকবে। তবে তারা আউটপুট প্রদর্শিত হয় না।
ypercubeᵀᴹ

@ আইপিকিউব - ঠিক আছে, তবে নেতৃস্থানীয় শূন্যগুলির সংখ্যা কেবলমাত্র 32 টি বিটগুলি পূরণ করতে হবে (ব্যবহারকারী-সংজ্ঞার বিপরীতে)।
নিক চাম্মাস

@ নিক: হ্যাঁ, কোনও তর্ক নেই। আমি মনে করি পয়েন্টটি নেতৃস্থানীয় শূন্যগুলি সঞ্চয় করা আছে কিনা তা নয়। এটি একই সংখ্যার দুটি সংস্করণ ডেটাটাইপগুলিতে সংরক্ষণ করা যায় কিনা, তার সাথে একটি এবং শীর্ষস্থানীয় জিরো ছাড়াই one
ypercubeᵀᴹ

তবে এটি কোনও অর্থবহ নয়। দুটি দশমিক শীর্ষস্থানীয় শূন্যের 32-বিট পূর্ণসংখ্যার শীর্ষস্থানীয় শূন্যগুলির সংখ্যার সাথে একেবারেই কোনও সম্পর্ক নেই। দশমিক সংখ্যা বিবেচনা করুন - এটি 15কেবলমাত্র হেক্সাডেসিমালে এক অঙ্ক নেয় F,। তাদের ইতিমধ্যে "নেতৃস্থানীয় শূন্য" এর একটি আলাদা সংখ্যা রয়েছে। 2147483647 হ'ল 10 সংখ্যা, তবে হেক্সে এটি কেবল 7FFFFFFF বা 8 ডিজিট।
এরিক

মৌলিকভাবে, আমাদের অবশ্যই গাণিতিক সংখ্যা পদ্ধতি বিবেচনা করতে হবে যা আমরা ব্যবহার করছি ... এক্ষেত্রে দশমিক (বেস 10)। 23 একটি দশমিক সংখ্যা; এটি 0x1000 + 0x100 + 2x10 + 3 = 23. অষ্টালে এটি 2X8 + 3 এবং আরও অনেক কিছু। সুতরাং, স্টোরেজ ইঞ্জিনকে বলতে, "দুটি নেতৃত্বাধীন শূন্য সহ 23 স্টোর" দরকারী নয়, যেহেতু এটি কেবল একই চূড়ান্ত ফলাফলকে এনকোড করে, এটি 23 S সংখ্যা যা আপনি সন্নিবেশ করানো হয়েছে, অর্থাত, 0023 বা 23 থেকে সমান
ooutwire
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.