NUMERIC এবং ডেসিমাল এর মধ্যে কি কোনও পার্থক্য আছে?


47

আমি জানি যে এসকিউএল সার্ভারে NUMERIC এবং ডেসিমাল ডেটা টাইপগুলি একই রকম কাজ করে: সেগুলি তৈরি করার বাক্য গঠন একই, আপনি যে মানগুলির মধ্যে সংরক্ষণ করতে পারেন সেগুলি একই etc.

তবে, এমএসডিএন ডকুমেন্টেশন দুটির মধ্যে সম্পর্কের বিষয়টি বর্ণনা করে:

সংখ্যাটি কার্যত দশমিকের সমতুল্য।

সাধারণত, যখন আমি বাছাইকারীকে " কার্যকরী সমতুল্য " দেখি , তার অর্থ এই যে দুটি জিনিস হুবহু এক নয় , তবে এগুলি দুটি ভিন্ন ধরণের যা বাহ্যিক থেকে পৃথক পৃথক

এই জড়িত সত্য? NUMERIC এবং DECIMAL এর মধ্যে কি পার্থক্য রয়েছে যা কেবল কোনও বাইরের পর্যবেক্ষকের সাথে একই আচরণ করা হয়? বা এগুলি কি আসলে সমতুল্য, উদাহরণস্বরূপ NUMERIC হ'ল ডিস্কিমালের একটি উত্তরাধিকার প্রতিশব্দ?


1
আপনি এসকিউএল সার্ভারের বাইরের সমর্থনে পার্থক্য খুঁজে পেতে পারেন , উদাহরণস্বরূপ আমাকে এসএসআইএসের এই অদ্ভুত পার্থক্য সম্পর্কে সচেতন করে তোলা হয়েছিল ।
অ্যারন বারট্রান্ড

উত্তর:


56

এগুলি আসলে সমতুল্য, তবে এগুলি স্বতন্ত্র প্রকারের, এবং প্রযুক্তিগত প্রতিশব্দ নয়, যেমন ROWVERSIONএবং TIMESTAMP- যদিও এগুলি এক সময় নথিতে প্রতিশব্দ হিসাবে উল্লেখ করা যেতে পারে । এটি প্রতিশব্দটির কিছুটা আলাদা অর্থ (যেমন নাম বাদে এগুলি পৃথক পৃথক, অদ্ভুত, তাই না?

এমএসডিএন-তে আমি শব্দটি যা ব্যাখ্যা করি তা হ'ল:

এই প্রকারগুলি অভিন্ন, তাদের কেবল আলাদা নাম রয়েছে।

type_idমান ব্যতীত , এখানে সমস্ত কিছুই একরকম:

SELECT * FROM sys.types WHERE name IN (N'numeric', N'decimal');

দুজনের মধ্যে কোনও আচরণগত পার্থক্য সম্পর্কে আমার একেবারেই জ্ঞান নেই এবং এসকিউএল সার্ভার .5.৫ এ ফিরে যাওয়া সর্বদা তাদেরকে 100% বিনিময়যোগ্য হিসাবে বিবেচনা করেছে।

ডিসিমাল (18,2) এবং NUMERIC (18,2) এর জন্য? একজনকে অপরকে অর্পণ করা প্রযুক্তিগতভাবে একটি "রূপান্তর"?

আপনি যদি স্পষ্টভাবে তা করেন। আপনি একটি টেবিল তৈরি করে এবং তারপরে স্পষ্টভাবে সম্পাদনকারী বা - আপনি আশা করতে পারেন - অন্তর্নিহিত রূপান্তরগুলির জন্য ক্যোয়ারী পরিকল্পনাটি পরিদর্শন করে সহজেই এটি প্রমাণ করতে পারেন। এখানে একটি সাধারণ টেবিল:

CREATE TABLE [dbo].[NumDec]
(
    [num] [numeric](18, 0) NULL,
    [dec] [decimal](18, 0) NULL
);

এখন এই অনুসন্ধানগুলি চালান এবং পরিকল্পনাটি ক্যাপচার করুন:

DECLARE @num NUMERIC(18,0);
DECLARE @dec DECIMAL(18,0);

SELECT 
  CONVERT(DECIMAL(18,0), [num]), -- conversion
  CONVERT(NUMERIC(18,0), [dec])  -- conversion
FROM dbo.NumDec
UNION ALL SELECT [num],[dec] 
  FROM dbo.NumDec WHERE [num] = @dec  -- no conversion
UNION ALL SELECT [num],[dec] 
  FROM dbo.NumDec WHERE [dec] = @num; -- no conversion

এসকিউএল সেন্ট্রি প্ল্যান এক্সপ্লোরার * -তে দেখানো হয়েছে , পরিকল্পনাটি আসলেই আকর্ষণীয় নয়:

এখানে চিত্র বর্ণনা লিখুন

তবে এক্সপ্রেশন ট্যাবটি নিশ্চিত:

এখানে চিত্র বর্ণনা লিখুন

আমি উপরে মন্তব্য হিসাবে, আমরা তাদের জিজ্ঞাসা যেখানে স্পষ্ট রূপান্তর আছে, কিন্তু আমরা তাদের প্রত্যাশা থাকতে পারে যেখানে কোন স্পষ্ট রূপান্তর আছে। মনে হয় অপ্টিমাইজার তাদেরকেও বিনিময়যোগ্য হিসাবে বিবেচনা করবে।

এগিয়ে যান এবং এই পরীক্ষাটিও চেষ্টা করুন (ডেটা এবং সূচি)।

CREATE TABLE [dbo].[NumDec2]
(
    [num] [numeric](18, 2) NULL,
    [dec] [decimal](18, 2) NULL
);

INSERT dbo.NumDec2([num],[dec])
SELECT [object_id] + 0.12, [object_id] + 0.12
  FROM sys.all_columns;

CREATE INDEX [ix_num] ON dbo.NumDec2([num]);
CREATE INDEX [ix_dec] ON dbo.NumDec2([dec]);

এখন এই ক্যোয়ারী চালান:

DECLARE @num NUMERIC(18,2) = -1291334356.88,
        @dec NUMERIC(18,2) = -1291334356.88;

SELECT [dec] FROM dbo.NumDec2 WHERE [dec] = @num
UNION ALL
SELECT [num] FROM dbo.NumDec2 WHERE [num] = @dec;

পরিকল্পনার কোনও রূপান্তর নেই (আসলে এক্সপ্রেশন ট্যাবটি খালি):

এখানে চিত্র বর্ণনা লিখুন

এমনকি এগুলি কোনও অপ্রত্যাশিত রূপান্তর বাড়ে না। অবশ্যই আপনি এটি প্রিডিকেটটিতে আরএইচএসে দেখেন, তবে কোনও ক্ষেত্রেই সন্ধানের সুবিধার্থে কলামের ডেটার বিপরীতে কোনও রূপান্তর ঘটেনি (একটি স্ক্যানের তুলনায় অনেক কম)।

SELECT [dec] FROM dbo.NumDec2 WHERE [dec] = CONVERT(DECIMAL(18,2), @num)
UNION ALL
SELECT [dec] FROM dbo.NumDec2 WHERE [dec] = CONVERT(DECIMAL(18,2), @dec)
UNION ALL
SELECT [num] FROM dbo.NumDec2 WHERE [num] = CONVERT(NUMERIC(18,2), @num)
UNION ALL
SELECT [num] FROM dbo.NumDec2 WHERE [num] = CONVERT(NUMERIC(18,2), @dec)
UNION ALL
SELECT [num] FROM dbo.NumDec2 WHERE [num] = CONVERT(DECIMAL(18,2), @num)
UNION ALL
SELECT [num] FROM dbo.NumDec2 WHERE [num] = CONVERT(DECIMAL(18,2), @dec)
UNION ALL
SELECT [dec] FROM dbo.NumDec2 WHERE [dec] = CONVERT(NUMERIC(18,2), @num)
UNION ALL
SELECT [dec] FROM dbo.NumDec2 WHERE [dec] = CONVERT(NUMERIC(18,2), @dec);

ব্যক্তিগতভাবে, আমি এই শব্দটি ব্যবহার DECIMALকরতে বেশি পছন্দ করি কারণ এটি অনেক বেশি নির্ভুল এবং বর্ণনামূলক। BITএটি "সংখ্যাসূচক "ও।

* Disclaimer: I work for SQL Sentry.

আমি জানি যে এসকিউএল, যেমন ডেসিমাল (18,2) এবং ডেসিমাল (18,0) কে "বিভিন্ন ধরণের" হিসাবে গণ্য করে; এর অর্থ কি ডেসিমাল (18,2) এবং NUMERIC (18,2) এর জন্য একই সত্য? একজনকে অপরকে অর্পণ করা প্রযুক্তিগতভাবে একটি "রূপান্তর"?
কুতুলু মাইক

@ মিশেল ইডেনফিল্ড আপনার নতুন প্রশ্নের জন্য আমার উত্তর আপডেট করেছে।
অ্যারন বারট্রান্ড

1
আমি জানি এটি একটি পুরানো উত্তর তবে আমি সবেমাত্র একটি কেস পেয়েছি যেখানে এই সংখ্যাটি এবং দশমিক সমার্থক শব্দটি এসকিউএল সার্ভারকে ত্রুটি বাড়িয়ে তোলে caused ভেবেছিলাম যে অন্য কেউ এর দ্বারা উপকৃত হতে পারে সে ক্ষেত্রে আমার এখানে একটি মন্তব্য করা উচিত।
জোহর পেরেড

অ্যারোনবার্ট্র্যান্ড আমি আপনার উত্তরের পক্ষে ভোট দিয়েছি কারণ এটি সহায়ক। উভয় প্রকারের দেখতে অভিন্ন বলে মনে হয় যদি তাই হয় তবে কেন তাদের নাম আলাদা রাখা হয়েছে? কোন historicalতিহাসিক কারণ আছে ?
ইভানজিনহো

@ ইভানজিনহো আমি নিশ্চিত নই যে আপনার প্রশ্নটি বক্তৃতামূলক কিনা, সেখানে প্রচুর তত্ত্ব রয়েছে (এই পৃষ্ঠায় এবং উত্তরটি আপনি সংযুক্ত করেছেন), তবে আপনি যদি একটি নির্দিষ্ট উত্তর চান তবে আপনি সম্ভবত ভাগ্যের বাইরে চলে যাবেন। আপনাকে প্রথমে এসকিউএল সার্ভারে উভয় প্রকার প্রয়োগ করেছিলেন এমন প্রকৃত প্রকৌশলীগুলি সন্ধান করতে হবে এবং সেই বাস্তবায়ন এবং সেই সময়ের মানটির তাদের ব্যাখ্যা উভয়ের স্মৃতিতে নির্ভর করতে হবে।
অ্যারন বার্ট্র্যান্ড

15

তারা অনুশীলনে অভিন্ন, তবে (এসকিউএল 2003 স্ট্যান্ডার্ড থেকে):

21) সাংখ্যিক ডেটা টাইপ সঠিক সাংখ্যিক নির্দিষ্ট করে, দশমিক স্পষ্টতা এবং স্কেল দ্বারা নির্দিষ্ট সঙ্গে precisionএবং scale

22) দশমিক তথ্য টাইপ সঠিক সাংখ্যিক নির্দিষ্ট করে, দশমিক স্কেল দ্বারা নির্দিষ্ট সঙ্গে scaleএবং বাস্তবায়ন-সংজ্ঞায়িত দশমিক নির্ভুলতা সমান বা নির্দিষ্ট মানের চেয়ে বড় precision


5
তখন মৌলিক প্রশ্ন (এবং আমি বিশ্বাস করি যে উত্তরটি হ'ল), এসকিউএল সার্ভার কি ডেসিমালের যথার্থতাটিকে NUMERIC এর চেয়ে আলাদাভাবে বাস্তবায়ন করেছিল? কি মান বলছেন পারে সম্পন্ন করা আসলে করা হয়েছিল চেয়ে অনেক কম প্রাসঙ্গিক।
অ্যারন বারট্রান্ড

5
ধন্যবাদ। এটি বিভিন্ন নাম সহ দুটি ধরণের তবে অভিন্ন আচরণের ফলোআপ প্রশ্নের একটি দুর্দান্ত উত্তর।
গাবে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.