SQLite এ DATETIME মানগুলি কীভাবে কাজ করবে?


110

আমি অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলি তৈরি করছি এবং তৈরির রেকর্ডের তারিখ / সময় বাঁচাতে হবে। এসকিউএল ডক্স বলছে, তবে, "এসকিউএলাইটের তারিখ এবং / অথবা সময়গুলি সংরক্ষণের জন্য আলাদা করে রাখা স্টোরেজ ক্লাস নেই" এবং এটি "তারিখ এবং সময়কে পাঠ্য, বাস্তব বা মানক মান হিসাবে সংরক্ষণ করতে সক্ষম"।

এক ধরণের অপরটির ব্যবহারের প্রযুক্তিগত কারণ আছে কি? এবং একক কলাম স্টোর সারি থেকে সারিতে তিনটি বিন্যাসের যে কোনওটিতে তারিখ থাকতে পারে?

আমার পরে তারিখগুলির তুলনা করা দরকার। উদাহরণস্বরূপ, আমার অ্যাপ্লিকেশনগুলিতে আমি সমস্ত তারিখ খ-এর মধ্যে তৈরি হওয়া তারিখ বি পর্যন্ত সমস্ত রেকর্ড দেখাবো I


উত্তর:


83

এসক্লাইটে নির্দিষ্ট সময়কাল টাইপ নেই। আপনি ব্যবহার করতে পারেন TEXT, REALবা INTEGER, ধরন যেটা মামলা আপনার চাহিদা।

সরাসরি ডকস থেকে

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

  • পাঠ্য ISO8601 স্ট্রিং হিসাবে ("YYYY-MM-DD HH: MM: SS.SSS")।
  • প্রকৃত গ্রেগরিয়ান ক্যালেন্ডার অনুসারে, জুলিয়ান দিবস সংখ্যা হিসাবে সত্য, খ্রিস্টপূর্ব ২৪ নভেম্বর, 4714 এ গ্রিনউইসে দুপুরের পর থেকে দিনগুলি।
  • ইউনিক্স সময় হিসাবে শনিবার, 1970-01-01 00:00:00 ইউটিসি থেকে সেকেন্ডের সংখ্যা।

অ্যাপ্লিকেশনগুলি এই ফর্ম্যাটগুলির যে কোনওটিতে তারিখ এবং সময় সঞ্চয় করতে এবং অন্তর্নির্মিত তারিখ এবং সময় ফাংশনগুলি ব্যবহার করে ফর্ম্যাটগুলির মধ্যে অবাধে রূপান্তর করতে পারে।

SQLite অন্তর্নির্মিত তারিখ এবং সময় ফাংশন এখানে পাওয়া যাবে


11
গুরুত্বপূর্ণ লক্ষণীয় - তারিখগুলি সংরক্ষণের সমস্ত পদ্ধতিতে ফর্ম্যাটগুলি ব্যবহার করা হয় যা মান =, <,> এবং বিটউইউইন অপারেটর ব্যবহার করে তুলনা করা যেতে পারে।
ল্যারি লাস্টিগ

2
"এসকিউএলাইটের তারিখ এবং / অথবা সময়গুলি সংরক্ষণের জন্য আলাদা আলাদা কোনও স্টোরেজ শ্রেণি নেই" - এটির তারিখ এবং তারিখ
টাইমগুলি

12
পছন্দ করুন এসকিউএলাইট কোনও কলামের ঘোষিত ধরণ হিসাবে (DATETIME সহ) যে কোনও কিছুকে অনুমতি দেয়। তার উপর ভিত্তি করে, এটি সেই কলামটিকে স্টোরেজ শ্রেণীর সাথে একটি সখ্যতা দেয় (এটি ডকুমেন্টেশনে DATETIME এ কীভাবে কাজ করে তার উদাহরণও রয়েছে)। সেই স্নেহটি আরও একটি ইঙ্গিতের মতো, প্রতিটি এন্ট্রি হিসাবে কলামে আসলে আলাদা স্টোরেজ ক্লাস থাকতে পারে। স্টোরেজ ক্লাসটি এখনও কোনও ধরণের চেয়ে ধাপে দুর্বল এবং একাধিক প্রকারের দ্বারা ব্যাক করা যায়। হ্যাঁ, আপনি DATETIME ব্যবহার করতে পারেন। না, এটি আসলে এটি কোনও প্রকার বা স্টোরেজ শ্রেণির হিসাবে সমর্থন করে না। হ্যাঁ, ডকুমেন্টেশনে আসলে "DATETIME" শব্দটি রয়েছে।
জ্যাস্পার

20

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

পাঠ্য ISO8601 স্ট্রিং হিসাবে ("YYYY-MM-DD HH: MM: SS.SSS")। প্রকৃত গ্রেগরিয়ান ক্যালেন্ডার অনুসারে, জুলিয়ান দিবস সংখ্যা হিসাবে সত্য, খ্রিস্টপূর্ব ২৪ নভেম্বর, 4714 এ গ্রিনউইসে দুপুরের পর থেকে দিনগুলি। ইউনিক্স সময় হিসাবে শনিবার, 1970-01-01 00:00:00 ইউটিসি থেকে সেকেন্ডের সংখ্যা। অ্যাপ্লিকেশনগুলি এই ফর্ম্যাটগুলির যে কোনওটিতে তারিখ এবং সময় সঞ্চয় করতে এবং অন্তর্নির্মিত তারিখ এবং সময় ফাংশনগুলি ব্যবহার করে ফর্ম্যাটগুলির মধ্যে অবাধে রূপান্তর করতে পারে।

এটি বলার পরে, আমি ইউনিক্স পর্বের সময় থেকে 1970 (1970-01-01 00:00:00 ইউটিসি) থেকে INTEGER এবং সেকেন্ড সঞ্চয় করব।


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

1
@dtmilano আপনি এখানে স্ট্রিংয়ের পরিবর্তে কেন INTEGER পছন্দ করেন?
ইগোরগানাপলস্কি

1
INTEGER শুধুমাত্র 8 বাইট ব্যবহার করে, এই উদাহরণটিতে টেক্সট 23 বাইট ব্যবহার করছে। এটি কী ধরণের ডেটা সংরক্ষণ করে তা কীভাবে চয়ন করবেন তা পরিষ্কার নয় it এর অর্থ কী আমি যদি INTEGER ধরণের একটি কলাম তৈরি করি তবে ফাংশনগুলি স্বয়ংক্রিয়ভাবে ইউনিক্স টাইম হিসাবে সঞ্চয় হবে?
রায়জিনজ 10:56

2
বাস্তব 8 টি বাইট ব্যবহার করে। ইপোক সেকেন্ডগুলি 2286 এর শেষ অবধি 10 ডিজিট হবে এবং যেহেতু আইইইই ডাবল 15-17 উল্লেখযোগ্য অঙ্কগুলিকে সমর্থন করে , এটি আপনাকে মিলিসেকেন্ড রেজোলিউশনের চেয়ে আরও ভাল দেয়। RSQLiteদেখে মনে হচ্ছে POSIXctএটি সংখ্যার যুগতে রূপান্তরিত হচ্ছে , সুতরাং এটি আমার পক্ষে যথেষ্ট ভাল কাজ করে।
r2evans

@ r2evans আপনি কী বলছেন তা আমি নিশ্চিত নই। আমি যদি ইপচের পর থেকে মিলিসেকেন্ডগুলি সঞ্চয় করতে চাই তবে আমি কীভাবে এটি করব?
মাইকেল

14

এসকিউএলাইটের অন্যতম শক্তিশালী বৈশিষ্ট্য আপনাকে স্টোরেজ ধরণের চয়ন করতে দেয়। তিনটি পৃথক সম্ভাব্য ব্যক্তির প্রত্যেকের সুবিধা / অসুবিধা:

  • ISO8601 স্ট্রিং

    • স্ট্রিং তুলনা বৈধ ফলাফল দেয়
    • ভগ্নাংশের সেকেন্ডে তিন দশমিক সংখ্যা পর্যন্ত সঞ্চয় করে
    • আরও সঞ্চয় স্থান প্রয়োজন
    • ডাটাবেস ব্রাউজার ব্যবহার করার সময় আপনি সরাসরি তার মান দেখতে পাবেন
    • অন্যান্য ব্যবহারের জন্য পার্সিংয়ের প্রয়োজন
    • "ডিফল্ট কারেন্টটাইমস্ট্যাম্প" কলাম পরিবর্তনকারী এই ফর্ম্যাটটি ব্যবহার করে সংরক্ষণ করবে
  • সত্য নম্বর

    • ভগ্নাংশের সেকেন্ড সম্পর্কে উচ্চ নির্ভুলতা
    • দীর্ঘতম সময়সীমা
  • পূর্ণ সংখ্যা

    • সর্বনিম্ন স্টোরেজ স্পেস
    • দ্রুত অপারেশন
    • ছোট সময়সীমা
    • সম্ভাব্য বছর 2038 সমস্যা

আপনার যদি বিভিন্ন ধরণের তুলনা করতে বা বাহ্যিক অ্যাপ্লিকেশনে রফতানি করতে হয় তবে আপনি এসকিউএলাইটের নিজস্ব ডেটটাইম রূপান্তর ফাংশন প্রয়োজনমতো ব্যবহার করতে পারবেন ।


1
2038 সমস্যা কেন? INTEGER মনে করে 64 বিট স্টোরেজ সমর্থন করে।
গুয়ান বোশেন

1
@ গুয়ানবোশেন যতদূর আমি বলতে পারি, 2038 নিয়ে চিন্তার একমাত্র কারণ হোস্ট প্ল্যাটফর্মের সমর্থন। এসকিউএল ডকুমেন্টেশন রেফারেন্স প্রয়োগের ক্ষেত্রে সি এর localtime_r()( sqlite.org/lang_datefunc.html#caveats_and_bugs ) ব্যবহার করার দাবি localtime()করেছে এবং হোস্ট প্ল্যাটফর্মটিতে 32-বিট থাকলে সম্ভাব্যত 2038-এর ঝুঁকিপূর্ণ হতে পারে time_t। এটি বলেছে যেহেতু এসকিউএলাইট নিরাপদ পরিসরের প্রাক রূপান্তর (একই লিঙ্কটি দেখুন) এর বাইরে তারিখগুলি ম্যাপ করে এই সম্ভাবনা থেকে রক্ষা করার দাবি করেছে, আমি মনে করি এটি অনিরাপদ ক্ষেত্রে বাদে কোনও সমস্যা হওয়ার সম্ভাবনা নেই।
জো

@ জোস স্পার্কস স্পষ্ট করার জন্য আপনাকে ধন্যবাদ।
গুয়ান বোশেন

7

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

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

এটি এইভাবে করাতে, আপনাকে [ভবিষ্যতের প্রিয় ডেটাবেস] এখানে [ভবিষ্যতের প্রিয় ডাটাবেস] দিয়ে প্রতিস্থাপন করা হলে উদ্বেগের দরকার পড়বে না যা কাকতালীয়ভাবে আপনি আজ যে তারিখের ফর্ম্যাটটি বেছে নিয়েছিলেন তা ব্যবহার করেননি।

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


7

এটিকে কোনও ধরনের ক্ষেত্রে সংরক্ষণ করুন long। দেখুন Date.getTime()এবংnew Date(long)


আমি কীভাবে এটি তুলনা করতে পারি ?? আপনি কি আমাকে প্রশ্নের উত্তর দিতে পারেন ..: ডি
খায়রিল উশান

কোডে তুলনা করার জন্য জোডা সময়টি দেখুন ( joda-time.sourceforge.net ) এবং এসকিউএল-তে সহজ দীর্ঘ তুলনা ব্যবহার করুন (যেমন সংখ্যাসূচক তুলনা)।
সিনট্যাক্স

টেবিল থেকে * নির্বাচন করুন যেখানে a এবং b এর মধ্যে সৃষ্টি;
কোয়েম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.