মাইএসকিএলে দুটি তারিখের মধ্যে পার্থক্যের দিনগুলি কীভাবে পাবেন?


162

আমার মাইএসকিউএল-এ কয়েকটি তারিখের মধ্যে থাকা দিনের সংখ্যা পাওয়া দরকার।

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

  • তারিখ চেক হয় 12-04-2010
  • তারিখ চেক আউট 15-04-2010

দিনের পার্থক্য হবে 3

উত্তর:


261

DATEDIFF ফাংশন সম্পর্কে কি ?

ম্যানুয়ালটির পৃষ্ঠাটি উদ্ধৃত করা হচ্ছে:

DATEDIFF () expr1 প্রদান করে - এক তারিখ থেকে অন্য তারিখের মধ্যে এক্সপ্রেস 2 মান হিসাবে প্রকাশিত হয়। expr1 এবং expr2 হল তারিখ বা তারিখ এবং সময় এক্সপ্রেশন। গণনায় কেবলমাত্র মানগুলির তারিখের অংশগুলি ব্যবহৃত হয়


আপনার ক্ষেত্রে, আপনি ব্যবহার করতে চাই:

mysql> select datediff('2010-04-15', '2010-04-12');
+--------------------------------------+
| datediff('2010-04-15', '2010-04-12') |
+--------------------------------------+
|                                    3 | 
+--------------------------------------+
1 row in set (0,00 sec)

তবে নোট করুন যে তারিখগুলি আপনার লেখা পোস্টের মতো YYYY-MM-DDনয়, হিসাবে লেখা উচিত DD-MM-YYYY


হ্যাঁ, আমি প্রশ্নটি তৈরি করার সময় তারিখের ফর্ম্যাটটি সম্পর্কে ভুলে গিয়েছিলাম; পি আপনাকে ধন্যবাদ
অডেল

4
পিএস ওয়াইওয়াই-এমএম-ডিডি আইএসও 8601 স্ট্যান্ডার্ড, তাই প্রত্যেকেরই এটি ব্যবহার করা উচিত। খুব ব্যবহারিক।
আর্নেস্তাস স্ট্যাঙ্কেভিয়াস

4
দ্রষ্টব্য : প্রথম আর্গুমেন্টটি datediff()পদ্ধতির জন্য দ্বিতীয় যুক্তির চেয়ে বড় হওয়া উচিত , অন্যথায় এটি নেতিবাচক মানটি ফিরিয়ে দেবে।
শশানথ

38

দ্রষ্টব্য আপনি যদি ২ তারিখের মধ্যে পুরো ২৪ ঘন্টা দিন গণনা করতে চান তবে ডেটেফ আপনার পক্ষে ভুল মানগুলি ফিরিয়ে দিতে পারে।

নথি হিসাবে বলা হয়েছে:

গণনায় কেবলমাত্র মানগুলির তারিখের অংশগুলি ব্যবহৃত হয়।

যার ফলস্বরূপ

select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')

প্রত্যাশিত 0 এর পরিবর্তে 1 প্রদান করে।

সমাধান ব্যবহার করছে select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); (তারিখের তুলনায় যুক্তির বিপরীত ক্রমটি নোট করুন)।

কিছু উদাহরণ:

  • select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); 0 প্রদান করে
  • select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00'); ফেরত 1
  • select timestampdiff(DAY, '2016-04-13 11:00:00', now()); 2016-04-13 11:00:00 থেকে এখন অবধি কত পুরো 24 ঘন্টা দিন কেটে গেছে তা ফেরৎ দেয়

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


অদ্ভুত যে আর্গুমেন্টগুলি datediff()এবং এর মধ্যে প্রায় ফ্লিপ হয় timestampdiff()
বিলেন্নাহ


6

আমি TIMESTAMPDIFF পছন্দ করি কারণ আপনি প্রয়োজনে ইউনিটটি সহজেই পরিবর্তন করতে পারেন।


5

গন্তব্য তারিখ থেকে বর্তমান তারিখের মধ্যে দিন পান

 SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;

আউটপুট

দিন

 335

2
SELECT md.*, DATEDIFF(md.end_date, md.start_date) AS days FROM  membership_dates md

আউটপুট ::

id  entity_id    start_date            end_date             days

1   1236      2018-01-16 00:00:00     2018-08-31 00:00:00    227
2   2876      2015-06-26 00:00:00     2019-06-30 00:00:00   1465
3   3880      1990-06-05 00:00:00     2018-07-04 00:00:00   10256
4   3882      1993-07-05 00:00:00     2018-07-04 00:00:00   9130

আশা করি এটি ভবিষ্যতে কাউকে সহায়তা করবে

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