পূর্ণসংখ্যার (সংখ্যাগত) হিসাবে সংরক্ষণের তারিখ, কী কী সুবিধা রয়েছে


11

প্রশ্ন 1

আমি এমন একটি সিস্টেমে কাজ করছি যেখানে তারিখটি পূর্ণসংখ্যার হিসাবে সংরক্ষণ করা হয় (প্রকৃত সংখ্যাসূচক (8,0)) এবং আমি লক্ষ্য করেছি যে অন্যান্য সিস্টেমগুলিও এই থ্রেডে সিস্কোর মতো তারিখ সংরক্ষণ করে । উদাহরণ

20120101  -- 01 Jan 2012

সংখ্যার তারিখ সিস্টেম রাখার এবং এসকিউএল ডেটটাইম ব্যবহার না করার কোনও সুবিধা আছে কি?

প্রশ্ন 2

এখন আমি দুটি তারিখের মধ্যে গ্রাহককে খুঁজে পেতে সংখ্যার তারিখটি লুপ করার চেষ্টা করছি। যদি startএবং enddateদুই মাস অন্তর্ভুক্ত থাকে তবে আমি কেবল 60 এর পরিবর্তে কয়েক হাজার রেকর্ড পেয়েছি Example উদাহরণ:

create table #temp1(day int,capacity int) /* just a temp table */

declare @start int 
declare @end int

set @start=20111201
set @end = 20120131

while (@start <= @end) 
Begin
    insert into #temp1  /* I am storing things in #temp table so data looks pretty */
    exec usp_GetDailyCap @date1= @start

    set @start = @start + 1;    
end

select * from #temp1

এটি 60 এর পরিবর্তে 8931 রেকর্ডগুলি টানছে above উপরের যুক্তিটি উন্নত করার জন্য কি আরও ভাল উপায় আছে যাতে আমি কেবল বৈধ তারিখগুলি টানবো? আমি ইসডেট এবং সাব-কোয়েরিগুলি চেষ্টা করেছি কিন্তু এটি কার্যকরভাবে কার্যকরভাবে কার্যকর হয়নি।


আপনি যদি এসকিউএল সার্ভার ২০০৮ বা তার চেয়েও বেশি চলমান থাকেন তবে আপনি আসলে ডেটা টাইপ ডেট ব্যবহার করতে পারেন। এটি কিছুটা ছোট এবং আপনাকে সময় অন্তর্ভুক্ত করতে বাধ্য করে না, তবে এসকিউএল এর প্রায় সব ডেটটাইম ফাংশন এখনও এর জন্য কাজ করে।
ডিফোক 42

2
আমি এই পদ্ধতির অসুবিধাগুলি কেবল কোনও উপকারে দেখতে পাচ্ছি
a_horse_with_no_name

উত্তর:


11

আপনার প্রথম প্রশ্নের উত্তর দিতে, আমি DATETIMEএসকিউএল সার্ভারের মধ্যে ডেটা টাইপ ব্যবহার করার পরামর্শ দেব । পারফরম্যান্স কারণে অগত্যা নয়, তবে আরডিবিএমএস-নির্দিষ্ট কার্যকারিতা লাভ করার জন্য। উদাহরণস্বরূপ, আপনি যুক্তিবিজ্ঞান অনেকটা পুনরায় উদ্ভাবিত মাত্র মৌলিক তারিখ গণিত যা করতে হবে হবে (মনে DATEDIFF(), DATEADD(), DATEPART()এবং অনেক অন্যান্য ফাংশন। তারা স্পষ্টত মতন হয় DATETIMEডাটা টাইপ এবং এর সাথে কাজ করা সহজ হয়)।

আপনার দ্বিতীয় প্রশ্ন হিসাবে, আপনি প্রথম সমস্যার (এবং আমার উত্তর) দিকে প্রস্তুত যে সঠিক সমস্যার দিকে চলেছেনআপনি 20111201 এবং 20120131 তারিখ হিসাবে সন্ধান করছেন এবং আপনার মস্তিষ্ক আপনাকে বলছে যে 60০ দিনের ব্যবধান হওয়া উচিত। ঠিক আছে, আপনি বদ্বীপের উপর ভিত্তি করে লুপিং করছেন ... যা এটি:

20120131 - 20111201 = 8930 (অন্তর্ভুক্ত লুপের সাথে এটি 8931 হবে)

অন্য কথায়, আপনার WHILEলুপটি 8931 বার সম্পাদন করছে। এটি ঘটছে কারণ সেগুলি পূর্ণসংখ্যার মান এবং আপনার লুপটি 20111231 থেকে সরাসরি 20120101 এ উঠবে না।

আপনি পূর্ণসংখ্যার বছর এবং মাসের ক্যাপটি বিবেচনায় আনবেন না (অর্থাত আপনার প্রশ্ন 2 সমস্যা)।


ঠিক এটা আমার প্রশ্ন। সংখ্যাসূচক তারিখের জন্য, লুপ হাজারে যেতে পারে, কেবল 30 দিন বা 29 দিন নয়। তবে মনে রাখবেন যে আমি একটি পেশাদার সিস্টেম নিয়ে কাজ করছি । এমনকি সিসকো এটি হিসাবে এটি ব্যবহার করে।
জ্যাকোফাল

4
কর্মক্ষমতা এবং কার্যকারিতা ছাড়াও, অখণ্ডতাও রয়েছে। তারিখ হিসাবে ইন্টিজার সঙ্গে, ডিবি সম্ভব হবে 20121301এবং 20120230এবং এমনকি 20129999একটি তারিখ হিসাবে।
ypercubeᵀᴹ

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

3
@ জ্যাকোফল
ypercubeᵀᴹ

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

6
  1. রাল্ফ কিমবল তারিখগুলি পূর্ণসংখ্যা হিসাবে সংরক্ষণের পরামর্শ দেয়। তিনি অনেকগুলি লিখেছেন, অনলাইন নিবন্ধ এবং বই উভয়ই।
  2. আপনি একটি ক্যালেন্ডার টেবিল ব্যবহার করতে পারেন এবং আপনার তারিখগুলিতে একটানা সংখ্যা জারি করতে পারেন:

    তারিখ নম্বর

    20120229 1234

    20120301 1235

ক্যালেন্ডার টেবিলটি তৈরি করতে হবে তবে এটি খুব সহজ কাজ।


1
আমি যদি দেখতে যেখানে আপনি সাংখ্যিক হিসাবে সংরক্ষিত তারিখ দিয়ে একটি তারিখ টেবিলে যোগদান এবং "@startdate এবং @enddate মধ্যে যেখানে [তারিখ]" ব্যবহার বীট হবে যারা সাংখ্যিক তারিখ ফিল্টার করার মাধ্যমে একটি ক্যোয়ারী ফিল্টার চাই
DForck42

1
@ ডিফোর্ক 42 আপনি যে কেসটি পরামর্শ দিচ্ছেন তার প্রয়োজন নেই: "যেখানে [তারিখসৌসত] 20120229 এবং 20120329 এর মধ্যে" ঠিক সেই একই সারিগুলি ফিরে আসবে "যেখানে [তারিখ] '20120229' এবং '20120329'"
একে

3
এবং তার যুক্তি কি ছিল?
এইচএলজিইএম

5

সম্ভাব্য ডেটা ধরণের এবং তাদের আকার / সীমাবদ্ধতা:

  • দশমিক (8,0): 5 বাইট
  • তারিখ: 3 বাইট, 0001-01-01 মাধ্যমে 9999-12-31 এর মধ্যে
  • ইন্ট: 4 বাইট

সংখ্যার তথ্য প্রকারের জন্য পেশাদার:

  • তারা দেখতে সুন্দর?

সংখ্যার তথ্য প্রকারের জন্য কনস:

  • তারিখ ক্রিয়াকলাপ পরিচালনা করার জন্য কাস্টম কোড প্রয়োজন
  • সঠিক তারিখগুলি পরিচালনা করার জন্য কাস্টম কোডের প্রয়োজন (যেমন 20120230 [ফেব্রুয়ারী 30 শে, ২০১২])
  • তারিখের ডেটা টাইপের সাথে তুলনা করলে বড় ডেটা পায়ের ছাপ।

সত্য, আপনি তারিখের ডেটা টাইপ আইএমএইচও ব্যবহার করা ভাল।

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