একটি ডাটাবেসে সময় (এইচএইচ: মিমি) সঞ্চয় করার সর্বোত্তম উপায়


100

আমি একটি ডাটাবেস সারণীতে সময় সঞ্চয় করতে চাই তবে কেবল ঘন্টা এবং কয়েক মিনিট সঞ্চয় করতে হবে। আমি জানি আমি কেবল ডেটটাইমটি ব্যবহার করতে পারি এবং তারিখের অন্যান্য উপাদানগুলি উপেক্ষা করতে পারি, তবে আমার আসলে প্রয়োজনের চেয়ে বেশি তথ্য সংরক্ষণ না করে এটি করার সর্বোত্তম উপায় কী?


২০০q সালে স্কেল সার্ভারের জন্য টাইমের সমতুল্য কত?
এরান মোড়াদ

@ বোরাটসাগদিয়েভ এসকিউএল সার্ভার ২০০৫-তে একটিও নেই, সে কারণেই আমি প্রশ্নটি জিজ্ঞাসা করেছি।
ম্যাথু ড্র্রেসার

উত্তর:


135

আপনি গত মধ্যরাতে মিনিটের সংখ্যার পূর্ণসংখ্যা হিসাবে এটি সঞ্চয় করতে পারেন:

যেমন।

0 = 00:00 
60 = 01:00
252 = 04:12

সময় পুনর্গঠন করার জন্য আপনাকে কিছু কোড লিখতে হবে তবে এটি জটিল নয়।


8
তারপরে আসল সময় ফিরে পেতে DATEADD () ব্যবহার করুন। এমনকি ক্ষুদ্রাকৃতি যথেষ্ট হবে।
জোয়েল কোহোর্ন

36
সেখানে গিয়েছেন, যা করেছেন ... মিনিট = dd% 60 এবং ঘন্টা = ডিডি / 60 ইনটসের কৌশলটি করে।
ওসামা আল-মায়েদ

2
এটি একটি দুর্দান্ত, সহজ এবং সোজা ধারণা। +1
হুইস্কিসিয়ার

7
একটি ছোট অসুবিধা হ'ল ডেটাবেজে পাঠযোগ্যতার অভাব
Jowen

আমাদের কিছু দিন, ঘন্টা এবং মিনিটের বৈকল্পিক সঞ্চয় করতে হবে; এসকিউএল সার্ভারে টাইম ডেটা টাইপ কেবল 23:59:59 পর্যন্ত যায় তাই আমরা এটি ব্যবহার করতে পারিনি। আপনার উত্তরের দ্বারা অনুপ্রাণিত হয়ে আমরা সিদ্ধান্ত নিয়েছি যে দিনগুলির জন্য তিনটি আন্তঃ কলাম থাকবে: ঘন্টা: সর্বাধিক নমনীয়তার জন্য মিনিট। ধন্যবাদ!
মাটাও


15

DATETIME শুরু DATETIME শেষ

পরিবর্তে ইভেন্ট_স্টার্ট এবং ইভেন্ট_েন্ডের মতো লেবেলযুক্ত দুটি পরিবর্তে দুটি DATETIME মান ব্যবহার করার জন্য আমি আপনাকে অনুরোধ করছি ।

সময় একটি জটিল ব্যবসা

বিশ্বের বেশিরভাগ অংশই এখন সঠিকভাবে বা ভুলভাবে ডানারি ভিত্তিক মেট্রিক সিস্টেমকে বেশিরভাগ পরিমাপের জন্য গ্রহণ করেছে। এটি সামগ্রিকভাবে ভাল, কারণ কমপক্ষে আমরা সকলেই সম্মত হতে পারি যে এগ্রি, এক মিলি, একটি ঘন সেমি। কমপক্ষে প্রায় তাই। মেট্রিক সিস্টেমে অনেক ত্রুটি রয়েছে তবে অন্তত আন্তর্জাতিকভাবে এটি ধারাবাহিকভাবে ত্রুটিযুক্ত।

সময়ের সাথে সাথে, আমাদের আছে; এক সেকেন্ডে 1000 মিলিসেকেন্ড, 60 সেকেন্ড থেকে এক মিনিট, 60 মিনিট থেকে এক ঘন্টা, 12 ঘন্টা প্রতিটি অর্ধেক দিনের জন্য, প্রতি মাসে প্রায় 30 দিন যা মাসের সাথে এবং এক বছরেরও এক্ষেত্রে পৃথক হয়, প্রতিটি দেশের সময় অন্যের থেকে অফসেট থাকে , প্রতিটি দেশে যেভাবে সময় বিন্যাস করা হয় তারতম্য।

এটি হজম করার জন্য অনেক কিছুই, তবে এ জাতীয় জটিল পরিস্থিতিতে একটি সহজ সমাধান পাওয়া খুব দীর্ঘ এবং সংক্ষিপ্ত।

কিছু কোণ কাটা যেতে পারে, তবে এমন কিছু রয়েছে যেখানে এটি বুদ্ধিমানের নয়

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

যথাযোগ্যতা, রেজোলিউশন এবং প্রতিক্রিয়া বৃদ্ধির জন্য দুটি DATETIME মান প্রয়োগ করার কারণগুলি।

ডিজাইনের অনাকাঙ্ক্ষিত ফলাফল কখন আসে তার জন্য এগুলি খুব কার্যকর।

আমি কি প্রয়োজনের চেয়ে বেশি ডেটা সঞ্চয় করছি?

এটি প্রাথমিকভাবে প্রদর্শিত হতে পারে যেমন আমার প্রয়োজনের চেয়ে আরও বেশি তথ্য সঞ্চিত করা হয় তবে এই হিটটি নেওয়ার উপযুক্ত কারণ রয়েছে।

এই অতিরিক্ত তথ্য সংরক্ষণ করা প্রায় সবসময় আমার দীর্ঘমেয়াদে আমার সময় এবং প্রচেষ্টা সাশ্রয় করে শেষ হয়, কারণ আমি অবশ্যম্ভাবীভাবে জানতে পারি যে যখন কাউকে বলা হয় যে কতক্ষণ কতটা সময় নিয়েছে, তখন তারা আরও জানতে চাইবে যে ঘটনাটি কখন এবং কোথায় ঘটেছিল।

এটি একটি বিশাল গ্রহ

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

সি শার্প

একটি ডেটটাইম সি # তে স্ট্রিংয়ের জন্য দুর্দান্তভাবে রেন্ডার করে। টোস্ট্রিং (স্ট্রিং ফর্ম্যাট) পদ্ধতিটি কমপ্যাক্ট এবং পড়তে সহজ।

যেমন

new TimeSpan(EventStart.Ticks - EventEnd.Ticks).ToString("h'h 'm'm 's's'")

SQL সার্ভার

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

যেমন

SELECT DATEDIFF(MINUTE, event_start, event_end)

আইএসও 8601 তারিখের মান

যদি এসকিউএলাইট ব্যবহার করে থাকেন তবে আপনার এটি নেই, সুতরাং পরিবর্তে একটি পাঠ্য ক্ষেত্র ব্যবহার করুন এবং এটি আইএসও 8601 ফর্ম্যাটে যেমন সঞ্চয় করুন।

"2013-01-27T12: 30: 00 + + 0000"

মন্তব্য:

  • এটি 24 ঘন্টা ঘড়ি ব্যবহার করে *

  • একটি জিপিএস সমন্বয়ের দ্রাঘিমাংশের মান (সরাসরি দিবালোক সংরক্ষণ বা দেশব্যাপী গ্রহণ না করে) ISO8601 মানচিত্রের টাইম অফসেট (বা +0000) অংশ

যেমন

TimeOffset=(±Longitude.24)/360 

... যেখানে east পূর্ব বা পশ্চিম দিক বোঝায়।

সুতরাং এটি ডেটা সহ দ্রাঘিমাংশ, অক্ষাংশ এবং উচ্চতা সংরক্ষণ করার উপযুক্ত কিনা তা বিবেচনা করার মতো। এটি প্রয়োগে পৃথক হবে।

  • আইএসও 8601 একটি আন্তর্জাতিক ফর্ম্যাট।

  • Http://en.wikedia.org/wiki/ISO_8601- এ আরও তথ্যের জন্য উইকিটি খুব ভাল ।

  • তারিখ এবং সময় আন্তর্জাতিক সময়ে সংরক্ষণ করা হয় এবং অফসেটটি রেকর্ড করা হয় বিশ্বের কোথায় সময় সংরক্ষণ করা হয়েছিল তার উপর নির্ভর করে।

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

বিনামূল্যে অতিরিক্ত পরামর্শ

এটি শৃঙ্খলার মতো ইভেন্টগুলিকে একসাথে করাও মূল্যবান। উদাহরণস্বরূপ যদি কোনও রেস রেকর্ডিং করা হয় তবে পুরো ইভেন্টটি রেসার, রেস_সাইকুইট, সার্কিট_চেকপয়েন্ট এবং সার্কিট_ল্যাপগুলি দ্বারা ভাগ করা যায়।

আমার অভিজ্ঞতায়, রেকর্ডটি কে সংরক্ষণ করেছে তা সনাক্ত করাও বুদ্ধিমানের কাজ। হয় ট্রিগার মাধ্যমে জনবিচ্ছিন্ন আলাদা টেবিল হিসাবে বা মূল টেবিলের মধ্যে একটি অতিরিক্ত কলাম হিসাবে।

আপনি যত বেশি ,োকান, ততই আপনি বেরিয়ে আসেন

আমি যতটা সম্ভব স্থানের সাথে অর্থনৈতিক হওয়ার আকাঙ্ক্ষাটি পুরোপুরি বুঝতে পেরেছি, তবে তথ্য হারাতে আমি খুব কমই এটি করব।

ডাটাবেসগুলির সাথে থাম্বের একটি নিয়ম শিরোনাম হিসাবে বলা আছে, একটি ডাটাবেস কেবলমাত্র তার কাছে যতটুকু ডেটা রাখে তা আপনাকে বলতে পারে এবং শূন্যস্থান পূরণ করে historicalতিহাসিক ডেটাগুলি দিয়ে ফিরে যাওয়া খুব ব্যয়বহুল হতে পারে।

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

আপনার প্রাথমিক নকশাটি যত ভাল হবে তত কম ব্যয়বহুল মেরামতগুলি পরে হবে।

আমি কেবল এই সবই বলি, কারণ যদি আমি সময়মতো ফিরে যেতে পারি তবে আমি সেখানে পৌঁছে যাওয়ার সময় নিজেকেই বলি।


2
আপনার মন্তব্য "একটি জিপিএস সমবায় সরাসরি জঞ্জাল হয়ে আইএসও 8601 মানচিত্রের +0000 অংশ" ভুল is এটি ইউটিসি থেকে অফসেটের
গ্যারি ওয়াকার

10

কেবল একটি নিয়মিত ডেটটাইম সঞ্চয় করুন এবং অন্য সব কিছু উপেক্ষা করুন। আপনি যখন কোনও ডেটটাইম লোড করতে পারতেন তখন কেন অতিরিক্ত সময় লেখার কোডটি ব্যয় করত যা কোনও ইন্টার লোড করে, এটিকে চালিত করে এবং একটি ডেটটাইমে রূপান্তর করে?


3
হার্ডড্রাইভে স্থান বাঁচানোর একটি সম্ভাব্য কারণ হতে পারে - একটি DATETIMEডেটা টাইপ সংরক্ষণ করতে 4 বাইট নেয়, যখন SMALLINTউদাহরণস্বরূপ, এর চতুর্থাংশ লাগে। আপনার যদি কেবল কয়েক হাজার সারি থাকে তবে কোনও বড় পার্থক্য নেই, তবে অনেক সংস্থার মতো আপনার যদি কয়েক মিলিয়ন সারি থাকে তবে আপনার স্থানের সঞ্চয় যথেষ্ট হবে।
শেরিডান

32
সম্ভবত, তবে বিবেচনা করুন যে 12 জন এই প্রশ্নের উত্তর দিয়েছেন, প্রত্যেকে নেবেন, এটি সম্পর্কে 15 মিনিট ভাবুন। ধরুন যে তারা সমস্ত প্রোগ্রামার এবং প্রতি ঘন্টা 50 ডলার করে। এই সমস্যাটি নিয়ে ভাবতে সময় ব্যয় করে আপনি অতিরিক্ত বাইটগুলি সঞ্চয় করতে একটি চকচকে নতুন 2 টিবি হার্ড ড্রাইভ কিনতে পারতেন।
শেঠ

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

ক্লাউড পরিষেবাদির সাথে, ডিস্কের স্থান সংরক্ষণ সেই ক্ষেত্রে গুরুত্বপূর্ণ হতে পারে যেখানে আপনি প্রতি বাইট পঠন / প্রক্রিয়াজাতকরণের জন্য অর্থ প্রদান করেন।
রেডশিফট

2
আর একটি মজাদার সমস্যা হ'ল যদি আপনি সময়ের উপাদানগুলির উপর নির্ভর করে থাকেন তবে বছরের বিভিন্ন সময় ব্যবহার করা হলে এটি দিবালোকের সঞ্চয়ী সামঞ্জস্যগুলির জন্য অ্যাকাউন্ট করবে না।
ক্রিস সিফার্ট

4

যেহেতু আপনি এসকিউএল সার্ভার ২০০ are এ থাকলে আপনি কিছুটা উল্লেখ করেননি আপনি সময় ডেটাটাইপ ব্যবহার করতে পারবেন অন্যথায় মধ্যরাত থেকে কয়েক মিনিট সময় ব্যবহার করতে


3

এসকিউএল সার্ভার আসলে একটি দিনের ভগ্নাংশ হিসাবে সময় সঞ্চয় করে। উদাহরণস্বরূপ, 1 পুরো দিন = 1 এর মান 12 ঘন্টা হল 0.5 এর মান।

আপনি যদি DATETIME প্রকারটি ব্যবহার না করে সময় মানটি সংরক্ষণ করতে চান তবে একটি দশমিক ফর্মের মধ্যে সময় সংরক্ষণ করা প্রয়োজনের সাথে উপযুক্ত হবে, পাশাপাশি একটি DATETIME সাধারণ রূপান্তর করার সময়।

উদাহরণ স্বরূপ:

SELECT CAST(0.5 AS DATETIME)
--1900-01-01 12:00:00.000

ডেসিমাল হিসাবে মান সংরক্ষণ করা (9,9) 5 বাইট গ্রহণ করবে। তবে, যদি যথার্থ গুরুত্ব না দেওয়া হয় তবে একটি সত্যিকারের মাত্র 4 বাইট ব্যবহার করা হবে। উভয় ক্ষেত্রেই, সামগ্রিক গণনা (অর্থাত্ সময় সময়) সহজেই সংখ্যার মানগুলিতে গণনা করা যায়, তবে ডেটা / সময় ধরণের ক্ষেত্রে নয়।


"এসকিউএল সার্ভার আসলে একটি দিনের ভগ্নাংশ হিসাবে সময় সঞ্চয় করে।" আমি মনে করি এটি প্রথম-বাইট এবং সময়, 01-জানুয়ারী -1900 সাল থেকে (বা তার আগে) কয়েক দিন সঞ্চয় করে, মিলিসেকেন্ডে, দ্বিতীয় 4 বাইটে। (স্মলডেটটাইম সময়ের জন্য মিলিসেকেন্ডের চেয়ে সংকীর্ণ তারিখের সীমা এবং মিনিটগুলির জন্য প্রত্যেকের জন্য 2 বাইট ব্যবহার করে)
ক্রাইস্টেন

আমি জানি (99.99% নিশ্চিত) যে দিনের সময়ের জন্য এটি ভগ্নাংশ।
গ্রাহাম.রিডস

2

আমি এগুলিকে একটি পূর্ণসংখ্যার (এইচএইচ * 3600 + এমএম * 60) এ রূপান্তর করব এবং সেভাবে এটি সংরক্ষণ করব। ছোট স্টোরেজ আকার এবং এখনও কাজ করতে যথেষ্ট সহজ।


2

আপনি যদি মাইএসকিউএল ব্যবহার করে থাকেন তবে ক্ষেত্রের ধরণের টাইম টাইম এবং এটির সাথে সম্পর্কিত কার্যকারিতা টিআইএম ব্যবহার করবে।

00:00:00 স্ট্যান্ডার্ড ইউনিক্স টাইম ফর্ম্যাট।

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


1

ছোট্ট সময় চেষ্টা করুন। এটি আপনি যা চান তা আপনাকে দিতে পারে না তবে এটি আপনাকে ভবিষ্যতের প্রয়োজনগুলি তারিখ / সময় ম্যানিপুলেশনগুলিতে সহায়তা করবে।


যদি @ এমড্রেসার <এমএসএসকিউএল 2005 ব্যবহার করে তবে সার্ভারটি "সীমানার বাইরে সীমানার সময় মান" অবলম্বন করবে
ফারগাস

1

আপনি কি কেবল ঘন্টা এবং মিনিট প্রয়োজন হবে তা নিশ্চিত? আপনি যদি এর সাথে অর্থপূর্ণ কিছু করতে চান (যেমন উদাহরণস্বরূপ দুটি যেমন ডেটা পয়েন্টের মধ্যে গণনা সময়সীমা) সময় অঞ্চল এবং ডিএসটি সম্পর্কিত তথ্য না থাকলে ভুল ফলাফল দিতে পারে। সময় অঞ্চলগুলি সম্ভবত আপনার ক্ষেত্রে প্রয়োগ হয় না, তবে ডিএসটি অবশ্যই করবে will


1

মিনিট-পূর্ব-মধ্যরাতের পরিবর্তে আমরা এটিকে 24 ঘন্টা ঘড়ি হিসাবে একটি ছোট্ট হিসাবে সঞ্চয় করি।

09:12 = 912 14:15 = 1415

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

যদিও খুব বোকা ... এমএস এসকিউএল-তে অনেক বছর আগে থেকেই আইএমএইচও-তে একটি টাইম ডেটাটাইপ হওয়া উচিত ছিল ...


ক্রিস্টেন একেবারে সঠিক, তবে কেবলমাত্র 24 ঘন্টা সময়কালের প্রতিনিধিত্বকারী কেবল ঘন্টা এবং মিনিট সম্পর্কে তার ধারণা সঠিক হলে। 10 বিটগুলি 0..1439 মিনিট সঞ্চিত করতে হবে। এর অর্থ এখানে অতিরিক্ত 6 টি বিট রয়েছে যা আপনার পছন্দ মতো ব্যবহার করা যেতে পারে, তাই সৃজনশীল হওয়ার সুযোগ রয়েছে। আপনি যে টাইম জোনে রয়েছেন তার জন্য ঘন্টা অফসেট সংরক্ষণ করার জন্য আমি 5 টি বিট ব্যবহার করার পরামর্শ দিই তবে কেবল যদি প্রশ্নকর্তা সর্বোচ্চ 23:59 (এক মিনিট থেকে মধ্যরাত) সর্বোচ্চ সময় সঞ্চয় করতে চান
ওয়ান্ডার ওয়ার্কার

1

আমার মনে হয় আপনি যা চাইছেন তা একটি ভেরিয়েবল যা মিনিট সংখ্যা হিসাবে সংরক্ষণ করবে। এটি বিভিন্ন ধরণের পূর্ণসংখ্যার ভেরিয়েবলের সাহায্যে করা যেতে পারে:

SELECT 9823754987598 AS MinutesInput

তারপরে, আপনার প্রোগ্রামে আপনি সহজেই গণনা করে ফর্মটিতে এটি দেখতে পারেন:

long MinutesInAnHour = 60;

long MinutesInADay = MinutesInAnHour * 24;

long MinutesInAWeek = MinutesInADay * 7;


long MinutesCalc = long.Parse(rdr["MinutesInput"].toString()); //BigInt converts to long. rdr is an SqlDataReader.   


long Weeks = MinutesCalc / MinutesInAWeek;

MinutesCalc -= Weeks * MinutesInAWeek;


long Days = MinutesCalc / MinutesInADay;

MinutesCalc -= Days * MinutesInADay;


long Hours = MinutesCalc / MinutesInAnHour;

MinutesCalc -= Hours * MinutesInAnHour;


long Minutes = MinutesCalc;

আপনি যেখানে দক্ষতাটি ব্যবহারের জন্য অনুরোধ করেছেন সেখানে একটি সমস্যা দেখা দেয়। তবে, যদি আপনি সময়ের জন্য স্বল্প হয়ে থাকেন তবে আপনার মিনিটের মান সঞ্চয় করতে কেবলমাত্র একটি nallable BigInt ব্যবহার করুন।

নালীর মান মানে সময়টি এখনও রেকর্ড করা হয়নি।

এখন, আমি বাইরের স্থান থেকে রাউন্ড ট্রিপ আকারে ব্যাখ্যা করব।

দুর্ভাগ্যক্রমে, একটি টেবিল কলাম কেবল একটি একক ধরণের সঞ্চয় করবে। অতএব, আপনার প্রয়োজনীয় প্রতিটি প্রকারের জন্য একটি নতুন টেবিল তৈরি করতে হবে।

উদাহরণ স্বরূপ:

  • যদি মিনিটস ইনপুট = 0 .. 255 তবে টিনিইন্ট ব্যবহার করুন (উপরে বর্ণিত রূপে রূপান্তর করুন)।

  • যদি মিনিটস ইনপুট = 256 .. 131071 তবে স্মলআইন্টটি ব্যবহার করুন (দ্রষ্টব্য: স্মার্টইন্টের ন্যূনতম মান -32,768। সুতরাং, উপরের মত রূপান্তর করার আগে পূর্ণ পরিসর ব্যবহার করতে মান সংরক্ষণ এবং পুনরুদ্ধার করার সময় 32768 এড়িয়ে যান এবং যুক্ত করুন)

  • MinutesInput = তাহলে 131072 .. 8589934591 তারপর ব্যবহার ইন্টারঅ্যাক্টিভ (দ্রষ্টব্য: অস্বীকার এবং প্রয়োজনীয় হিসাবে 2147483648 যোগ করুন)।

  • যদি মিনিটস ইনপুট = 8589934592 .. 36893488147419103231 তারপরে বিগইন্ট ব্যবহার করুন (দ্রষ্টব্য: প্রয়োজনীয় হিসাবে 9223372036854775808 যুক্ত করুন এবং অবহেলা করুন)।

  • যদি মিনিটস ইনপুট> 36893488147419103231 হয় তবে আমি ব্যক্তিগতভাবে ভিউচারার (এক্স) এক্স বাড়িয়ে এক্স প্রয়োজনীয় হিসাবে ব্যবহার করব যেহেতু একটি চর একটি বাইট। এটির পুরো বর্ণনা দেওয়ার জন্য আমাকে পরবর্তী তারিখে এই উত্তরটি আবার দেখতে হবে (অথবা সম্ভবত কোনও সহকর্মী স্ট্যাকওভারফ্লোই এই উত্তরটি শেষ করতে পারে)।

যেহেতু প্রতিটি মান নিঃসন্দেহে একটি অনন্য কী প্রয়োজন, ডাটাবেসের কার্যক্ষমতা তখনই স্পষ্ট হবে যখন সঞ্চিত মানগুলির পরিসীমা খুব ছোট (0 মিনিটের কাছাকাছি) এবং খুব বেশি (8589934591 এর চেয়ে বৃহত্তর) মধ্যে ভাল মিশ্রণ হয়।

মান সঞ্চিত হওয়া অবধি অবধি 36893488147419103231 এর চেয়ে বেশি সংখ্যায় পৌঁছানো পর্যন্ত আপনার মিনিটের উপস্থাপনের জন্য আপনার কাছে একটি একক বিগআইএন্ট কলামও থাকতে পারে, কারণ মিনিটের মান সংরক্ষণ করার জন্য আপনাকে কোনও অনন্য সনাক্তকারী এবং অন্য কোনও int এর প্রয়োজন হবে না।


0

ক্রিস্টেনের পরামর্শ অনুসারে ইউটিসি ফর্ম্যাটে সময় সাশ্রয় করা আরও ভাল সহায়তা করতে পারে।

আপনি 24 ঘন্টা ঘড়ি ব্যবহার করছেন তা নিশ্চিত করুন কারণ ইউটিসিতে কোনও মেরিডিয়ান এএম বা প্রধানমন্ত্রী ব্যবহার করা হচ্ছে না।

উদাহরণ:

  • 4:12 এএম - 0412 এ
  • 10:12 এএম - 1012
  • 2:28 অপরাহ্ন - 1428
  • 11:56 অপরাহ্ন - 2356

এটি এখনও স্ট্যান্ডার্ড চার ডিজিটের ফর্ম্যাট ব্যবহার করতে পছন্দনীয়।


0

ticksএকটি long/ হিসাবে সংরক্ষণ করুন bigint, যা বর্তমানে মিলি সেকেন্ডে পরিমাপ করা হয়। মানটি দেখে আপডেট হওয়া মানটি পাওয়া যাবে TimeSpan.TicksPerSecond

বেশিরভাগ ডাটাবেসে একটি ডেটটাইম টাইপ থাকে যা স্বয়ংক্রিয়ভাবে সময়গুলি পর্দার আড়ালে টিক হিসাবে সংরক্ষণ করে, তবে কিছু ডাটাবেসের ক্ষেত্রে যেমন স্কেললাইট, টিকিট সংরক্ষণ করা তারিখ সংরক্ষণের উপায় হতে পারে।

সর্বাধিক ভাষা থেকে সহজ রূপান্তর করা মঞ্জুর TicksTimeSpanTicks

উদাহরণ

সি # তে কোডটি হবে:

long TimeAsTicks = TimeAsTimeSpan.Ticks;

TimeAsTimeSpan = TimeSpan.FromTicks(TimeAsTicks);

যদিও সচেতন থাকুন, কারণ স্কেললাইটের ক্ষেত্রে, যা কেবলমাত্র বিভিন্ন ধরণের সংখ্যক প্রস্তাব দেয়, যা; INT, REALএবং VARCHARস্ট্রিং বা দুটি INTকোষ একত্রিত হয়ে টিকের সংখ্যা সংরক্ষণ করা প্রয়োজন । এটি হ'ল কারণ INTএটি একটি 32 বিট স্বাক্ষরিত সংখ্যা যেখানে BIGINTএকটি 64 বিট স্বাক্ষরিত নম্বর।

বিঃদ্রঃ

তবে আমার ব্যক্তিগত পছন্দটি হ'ল তারিখ এবং ISO8601সময়টিকে স্ট্রিং হিসাবে সংরক্ষণ করা ।


-1

আইএমএইচও সর্বোত্তম সমাধানটি কীভাবে আপনি ডাটাবেসের বাকী অংশে কীভাবে সময় সঞ্চয় করেন (এবং আপনার অ্যাপ্লিকেশনটির বাকী অংশ) তার উপর কিছুটা নির্ভর করে

ব্যক্তিগতভাবে আমি এসকিউএলাইটের সাথে কাজ করেছি এবং সর্বদা নিখুঁত সময় সংরক্ষণের জন্য ইউনিক্স টাইমস্ট্যাম্পগুলি ব্যবহার করার চেষ্টা করেছি , তাই দিনের সময় নিয়ে কাজ করার সময় (যেমন আপনি জিজ্ঞাসা করেছেন) আমি গ্লেন সলসবেরি তার উত্তরে যা লিখেছেন তা করি এবং মধ্যরাত থেকে সেকেন্ডের সংখ্যা সঞ্চয় করি

এই সাধারণ পদ্ধতিটি গ্রহণ করার সময় লোকেরা (আমাকে সহ!) কোড পড়তে কম বিভ্রান্ত হয় যদি আমি সর্বত্র একই মান ব্যবহার করি

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