মাইএসকিউএলে তারিখের মধ্যে কয়েক মাসের পার্থক্য


86

আমি 2 তারিখের সময় ক্ষেত্রের মধ্যে মাসের সংখ্যা গণনা করতে দেখছি।

ইউনিক্স টাইমস্ট্যাম্প পাওয়ার এবং 2 592 000 (সেকেন্ড) দ্বারা বিভাজক এবং মাইএসকিউএলকে গোল করার চেয়ে আরও ভাল উপায় কি আছে?

উত্তর:


16

DATEDIFF ফাংশন আপনি দুইটি তারিখের মধ্যে দিনের সংখ্যা দিতে পারেন। কোনটি আরও সঠিক, যেহেতু ... আপনি একটি মাসকে কীভাবে সংজ্ঞায়িত করবেন? (২৮, ২৯, ৩০, বা ৩১ দিন?)


68
পেরিওডিডিএফএফ সঠিকভাবে মাসের সংখ্যা গণনা করতে পারে।
ম্যাক্স ক্যাসেরেস

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

6
এটি সঠিক উত্তর নয়; আপনার নীচে ম্যাক্সের উত্তরটি সঠিকভাবে চিহ্নিত করা উচিত ।
গ্রাহাম চার্লস

4
আপনি পুরো মাসের সংখ্যা চান, লিপ বছরের জন্য সঠিকভাবে অ্যাকাউন্টিং এবং এক মাসের বিভিন্ন দিনের সংখ্যা চাইলে ম্যাক্সের উত্তর সঠিক নয়। PERIODDIFFকেবলমাত্র YYYYMM মান লাগে, তাই আপনি যদি YYYYmm মানগুলি পাস করার আগে নিজে নিজে যে সমস্ত দিনগুলি হিসাব না করেন, তবে আপনি গণনা করছেন সমস্তই মাসের সংখ্যা, পুরো মাসের চেয়ে কম সংখ্যক মাস যদি থাকে তবে নিকটতম মাসে গোল হয়। জেনের উত্তর নীচে দেখুন।
rgvcorley

4
PERIODDIFFমন্তব্যের জন্য এতগুলি আপত্তি কেন ? পিরিয়ডডিফ দিনের মান গ্রহণ করে না, সুতরাং আপনি যদি পুরো সংখ্যক মাসের চেয়ে কম পরিমাণ থাকে তবে নিকটতম মাস পর্যন্ত গোলের মাসগুলি গণনা করছেন
rgvcorley

220

প্রদত্ত দুটি তারিখের মধ্যে মাসের পার্থক্য:

আমি অবাক হয়েছি এখনও এর উল্লেখ করা হয়নি:

কটাক্ষপাত আছে TIMESTAMPDIFF () মাইএসকিউএল মধ্যে ফাংশন।

এটি আপনাকে যা করতে দেয় তা হ'ল দুটি TIMESTAMPবা DATETIMEমানগুলিতে (বা DATEমাইএসকিউএল স্বয়ংক্রিয়ভাবে রূপান্তরিত হবে) পাশাপাশি সময়ের সাথে আপনি নিজের পার্থক্যটিকে ভিত্তি করতে চান তার একক।

আপনি MONTHপ্রথম প্যারামিটারে ইউনিট হিসাবে নির্দিষ্ট করতে পারেন :

SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04')
-- Outputs: 0

SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-05')
-- Outputs: 1

SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-15')
-- Outputs: 1

SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-12-16')
-- Outputs: 7

এটি মূলত প্যারামিটার তালিকার প্রথম তারিখ থেকে কেটে যাওয়া মাসের সংখ্যা পায়। এই সমাধানটি স্বয়ংক্রিয়ভাবে প্রতি মাসে (২৮,৩০,৩১) দিনের বিভিন্ন পরিমাণের জন্য ক্ষতিপূরণ হিসাবে লিপ বছরগুলি বিবেচনায় নেওয়ার জন্য ক্ষতিপূরণ দেয় stuff আপনাকে কোনও স্টাফের বিষয়ে চিন্তা করতে হবে না।


যথাযথতার সাথে মাসের পার্থক্য:

আপনি যদি কেটে যাওয়া মাসের সংখ্যা দশমিক নির্ভুলতার পরিচয় দিতে চান তবে এটি আরও জটিল, তবে আপনি কীভাবে এটি করতে পারেন তা এখানে:

SELECT 
  TIMESTAMPDIFF(MONTH, startdate, enddate) +
  DATEDIFF(
    enddate,
    startdate + INTERVAL
      TIMESTAMPDIFF(MONTH, startdate, enddate)
    MONTH
  ) /
  DATEDIFF(
    startdate + INTERVAL
      TIMESTAMPDIFF(MONTH, startdate, enddate) + 1
    MONTH,
    startdate + INTERVAL
      TIMESTAMPDIFF(MONTH, startdate, enddate)
    MONTH
  )

আপনার তারিখের প্যারামিটারগুলি কোথায় startdateএবং enddateতা কোনও টেবিলে দুটি তারিখ কলাম থেকে হোক বা কোনও স্ক্রিপ্টের ইনপুট পরামিতি হিসাবে হোক:

উদাহরণ:

With startdate = '2012-05-05' AND enddate = '2012-05-27':
-- Outputs: 0.7097

With startdate = '2012-05-05' AND enddate = '2012-06-13':
-- Outputs: 1.2667

With startdate = '2012-02-27' AND enddate = '2012-06-02':
-- Outputs: 3.1935

8
এটি সঠিক উত্তর, PERIODDIFFনির্বাচিত উত্তরের মন্তব্যের জন্য সমস্ত আপোডগুলি খুব মিস-লিডিং
rgvcorley

4
ধন্যবাদ, আমার ক্ষেত্রে আমার অন্তর্ভুক্তিমূলক তারিখগুলির প্রয়োজন ছিল, তাই আমি সমস্ত "শেষ তারিখ" এর সাথে "তারিখ_আডড (শেষ তারিখ, অন্তর 1 দিন)" প্রতিস্থাপন করব। তারপরে 2014-03-01 থেকে 2014-05-31 2.97 এর পরিবর্তে 3.00 দেবে
সোভেন টোর

4
"যথাযথতার সাথে মাসের পার্থক্য:" এর জন্য আপনাকে বিশেষ ধন্যবাদ ..... আপনি
মাইএসকিএলের

4
রাজি। এটা সঠিক উত্তর. ঠিক আমি খুঁজছেন ছিল কি! ধন্যবাদ
জন ভোট

105

PERIOD_DIFF দুটি তারিখের মধ্যে মাস গণনা করে।

উদাহরণস্বরূপ, আপনার_সেবায় এখন () এবং একটি সময় কলামের মধ্যে পার্থক্য গণনা করতে:

select period_diff(date_format(now(), '%Y%m'), date_format(time, '%Y%m')) as months from your_table;

4
এটি 11 মাস 1 দিন, তাই 12 মাস হতে পারে তা যদি কোনও ধারণা হয় তবে আপনি যদি 30 দিনের মাসে পরিবর্তন হন তবে এটি এখনও 11 হবে?
ড্যারিল হেইন

4
11 মাস 1 দিন উপরের উদাহরণ সহ 11 মাস ফিরে আসবে। PERIOD_DIFF এর 30 বনাম 31 দিনের মাসের কোনও ধারণা নেই।
ম্যাক্স ক্যাসেরেস

27

আমি পেরিওডিডিএফও ব্যবহার করি । তারিখের বছর এবং তারিখটি পেতে, আমি এক্সট্র্যাক্ট ফাংশনটি ব্যবহার করি :

  SELECT PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM NOW()), EXTRACT(YEAR_MONTH FROM time)) AS months FROM your_table;

4
অবিশ্বাস্য! এটি সেই DATE_FORMATপদ্ধতিতে 50% কম সময় ব্যবহার করে , ধন্যবাদ! +1
ডেভিড রদ্রিগস

4
এখানে একটি ইউনিক্স টাইমস্ট্যাম্পের জন্য SELECT PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM NOW()), EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(time, "%Y%m%d"))) AS months FROM your_table;
স্মোল্লা

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

12

এখানে যতগুলি উত্তর দেখায়, সঠিকভাবে উত্তরটি আপনার প্রয়োজনের উপর নির্ভর করে। আমার ক্ষেত্রে, আমার নিকটতম পুরো সংখ্যার সাথে গোল করতে হবে

এই উদাহরণগুলি বিবেচনা করুন: 1 লা জানুয়ারি -> 31 জানুয়ারী: এটি 0 পুরো মাস, এবং প্রায় 1 মাস দীর্ঘ। ১ লা জানুয়ারী -> ১ লা ফেব্রুয়ারি? এটি পুরো 1 মাস, এবং ঠিক 1 মাস দীর্ঘ।

পুরো (সম্পূর্ণ) মাসের সংখ্যা পেতে , ব্যবহার করুন:

SELECT TIMESTAMPDIFF(MONTH, '2018-01-01', '2018-01-31');  => 0
SELECT TIMESTAMPDIFF(MONTH, '2018-01-01', '2018-02-01');  => 1

মাসগুলিতে একটি বৃত্তাকার সময়কাল পেতে , আপনি এটি ব্যবহার করতে পারেন:

SELECT ROUND(TIMESTAMPDIFF(DAY, '2018-01-01', '2018-01-31')*12/365.24); => 1
SELECT ROUND(TIMESTAMPDIFF(DAY, '2018-01-01', '2018-01-31')*12/365.24); => 1

এটি +/- 5 দিন এবং 1000 বছরেরও বেশি ব্যাপ্তির জন্য সঠিক। জেনের উত্তর স্পষ্টতই আরও নির্ভুল, তবে এটি আমার পছন্দ হিসাবে খুব ভার্জিক।


আমি অসম্মতি ... নির্বাচন করুন টাইমস্ট্যাম্পডিডিএফএফ (মাস, '2018-01-31', '2018-02-04'); আপনাকে 0 মাসের ব্যবধান দেয় ... নির্বাচন করুন টাইমস্ট্যাম্পডিএফএফ (মাস, '2018-01-31', '2018-03-01'); আপনাকে 1 দেয় ... যদি 5 দিন 0 হয়, 29 দিন 1 হয়?
স্কট

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

8

মাইএসকিউএল ম্যানুয়াল থেকে:

PERIOD_DIFF (পি 1, পি 2)

পি 1 এবং পি 2 পিরিয়ডের মধ্যে মাসের সংখ্যা ফেরত দেয়। পি 1 এবং পি 2 ওয়াইওয়াইএমএম বা ওয়াইওয়াইওয়াইএম আকারে থাকা উচিত। নোট করুন যে পিরিয়ড আর্গুমেন্ট P1 এবং P2 তারিখের মান নয়।

mysql> নির্বাচন করুন পেরিওড_ডিআইএফএফ (200802,200703); -> 11

সুতরাং এটির মতো কিছু করা সম্ভব হতে পারে:

Select period_diff(concat(year(d1),if(month(d1)<10,'0',''),month(d1)), concat(year(d2),if(month(d2)<10,'0',''),month(d2))) as months from your_table;

যেখানে ডি 1 এবং ডি 2 হ'ল তারিখের এক্সপ্রেশন।

আমাকে যদি () স্টেটমেন্টটি ব্যবহার করতে হয় তা নিশ্চিত করতে যে মাসগুলি 2-র পরিবর্তে 02-এর মতো দুটি সংখ্যার সংখ্যা ছিল।


8

আমি এই উপায়ে পছন্দ করি, কারণ এভরিওন এটি প্রথম নজরে পরিষ্কারভাবে বুঝতে পারবে:

SELECT
    12 * (YEAR(to) - YEAR(from)) + (MONTH(to) - MONTH(from)) AS months
FROM
    tab;

স্ট্যানিসালভ - আপনি যদি মাসের সংখ্যা দ্বারা ডেটা জানতে চান তবে এই পদ্ধতিটি ঠিক right আমার কিছু প্রতিবেদন আছে যা মাসে (জানুয়ারী / ফেব্রুয়ারী / মার ইত্যাদি) বিক্রয় দেখায় তবে এতগুলি ডেটা রয়েছে (চতুর্থাংশ / বছর / বিগত বছরগুলিতে চার্ট ইত্যাদি) যে আমি কোনও কিছুতেই গোষ্ঠী করতে পারি না। আমার কাঁচা তথ্য টানতে হবে এবং এর মাধ্যমে লুপ করতে হবে - যখন এটি 1/31 হয়, অনেক গণনা "পরের মাসে" মার্চ মাসে রেখেছিল যখন আমাদের মানুষেরা জানবে যে এটি ফেব্রুয়ারী। যদি এটি 2/4 হয় তবে কিছু গণনা বলে যে 1/31 হ'ল "এই মাসে" তবে 1/28 ছিল "গত মাসে"
স্কট

6

একটি ভাল উপায় আছে কি? হ্যাঁ. মাইএসকিউএল টাইমস্ট্যাম্প ব্যবহার করবেন না। তারা 36 বাইট দখল করে নিলেও এগুলি কাজ করা মোটেই সুবিধাজনক নয়। আমি মধ্য তারিখ থেকে জুলিয়ান ডেট এবং সেকেন্ডস ব্যবহার করে সমস্ত তারিখ / সময় মানের জন্য পুনরায় আদায় করব। এগুলি ইউনিক্সডেটটাইম গঠনের জন্য একত্রিত করা যেতে পারে। এটি যদি কোনও ডিডাবর্ডে (স্বাক্ষরযুক্ত 4 বাইট পূর্ণসংখ্যার) সঞ্চিত থাকে তবে 2106 অবধি সমস্ত তারিখগুলি এপোকের পর থেকে সেকেন্ড হিসাবে সংরক্ষণ করা যেতে পারে, 01/01/1970 DWORD সর্বাধিক ভাল = 4,294,967,295 - একটি DWord 136 বছর সেকেন্ড ধরে রাখতে পারে

তারিখ গণনা করার সময় জুলিয়ান তারিখগুলি কাজ করে খুব ভাল ইউনিক্সডেটটাইম মানগুলি তারিখ / সময় গণনা করার সাথে সাথে কাজ করা ভাল নয় তাকাতে ভাল হয় না, তাই যখন টাইমস্ট্যাম্পগুলি ব্যবহার করি যখন আমার একটি কলামের প্রয়োজন হবে যা আমি খুব বেশি গণনা করব না সহ, তবে আমি এক নজরে ইঙ্গিত চাই।

জুলিয়ান এবং পিছনে রূপান্তর খুব ভাল ভাষাতে খুব দ্রুত করা যেতে পারে। পয়েন্টার ব্যবহার করে আমার এটি প্রায় 900 টি ক্ল্কে নেমেছে (এটি অবশ্যই একটি STRING থেকে কোনও INTEGER তে রূপান্তর)

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


তারা 36 বাইট দখল করেছে এমন তথ্য আপনি কোথায় পেয়েছেন ? মাইএসকিউএল ম্যানুয়াল টিমেস্ট্যাম্প কলামের স্টোরেজ প্রয়োজনীয়তা 4 বাইটdev.mysql.com/doc/refman/5.1/en/stores-requirements.html
পঞ্চা

এখন Y2106 বাগের জন্য পরিকল্পনা শুরু করুন! ;-)
এরিকবিএসচুলজ

5

ক্যোয়ারির মতো হবে:

select period_diff(date_format(now(),"%Y%m"),date_format(created,"%Y%m")) from customers where..

গ্রাহক রেকর্ডে তৈরি ডেটস্ট্যাম্পের পর থেকে অনেকগুলি ক্যালেন্ডার মাস দেয়, মাইএসকিউএলকে অভ্যন্তরীণভাবে মাসে নির্বাচন করতে দেয়।


2
DROP FUNCTION IF EXISTS `calcula_edad` $$
CREATE DEFINER=`root`@`localhost` FUNCTION `calcula_edad`(pFecha1 date, pFecha2 date, pTipo char(1)) RETURNS int(11)
Begin

  Declare vMeses int;
  Declare vEdad int;

  Set vMeses = period_diff( date_format( pFecha1, '%Y%m' ), date_format( pFecha2, '%Y%m' ) ) ;

  /* Si el dia de la fecha1 es menor al dia de fecha2, restar 1 mes */
  if day(pFecha1) < day(pFecha2) then
    Set vMeses = VMeses - 1;
  end if;

  if pTipo='A' then
    Set vEdad = vMeses div 12 ;
  else
    Set vEdad = vMeses ;
  end if ;
  Return vEdad;
End

select calcula_edad(curdate(),born_date,'M') --  for number of months between 2 dates

2

এই কোডটি কার্যকর করুন এবং এটি একটি ফাংশন তারিখ নির্ধারণ করবে যা আপনাকে তারিখের বিন্যাসে yyyy-mm-dd এ পার্থক্য দেবে।

DELIMITER $$

CREATE FUNCTION datedifference(date1 DATE, date2 DATE) RETURNS DATE
NO SQL

BEGIN
    DECLARE dif DATE;
    IF DATEDIFF(date1, DATE(CONCAT(YEAR(date1),'-', MONTH(date1), '-', DAY(date2)))) < 0    THEN
                SET dif=DATE_FORMAT(
                                        CONCAT(
                                            PERIOD_DIFF(date_format(date1, '%y%m'),date_format(date2, '%y%m'))DIV 12 , 
                                            '-',
                                            PERIOD_DIFF(date_format(date1, '%y%m'),date_format(date2, '%y%m'))% 12 , 
                                            '-',
                                            DATEDIFF(date1, DATE(CONCAT(YEAR(date1),'-', MONTH(DATE_SUB(date1, INTERVAL 1 MONTH)), '-', DAY(date2))))),
                                        '%Y-%m-%d');
    ELSEIF DATEDIFF(date1, DATE(CONCAT(YEAR(date1),'-', MONTH(date1), '-', DAY(date2)))) < DAY(LAST_DAY(DATE_SUB(date1, INTERVAL 1 MONTH))) THEN
                SET dif=DATE_FORMAT(
                                        CONCAT(
                                            PERIOD_DIFF(date_format(date1, '%y%m'),date_format(date2, '%y%m'))DIV 12 , 
                                            '-',
                                            PERIOD_DIFF(date_format(date1, '%y%m'),date_format(date2, '%y%m'))% 12 , 
                                            '-',
                                            DATEDIFF(date1, DATE(CONCAT(YEAR(date1),'-', MONTH(date1), '-', DAY(date2))))),
                                        '%Y-%m-%d');
    ELSE
                SET dif=DATE_FORMAT(
                                        CONCAT(
                                            PERIOD_DIFF(date_format(date1, '%y%m'),date_format(date2, '%y%m'))DIV 12 , 
                                            '-',
                                            PERIOD_DIFF(date_format(date1, '%y%m'),date_format(date2, '%y%m'))% 12 , 
                                            '-',
                                            DATEDIFF(date1, DATE(CONCAT(YEAR(date1),'-', MONTH(date1), '-', DAY(date2))))),
                                        '%Y-%m-%d');
    END IF;

RETURN dif;
END $$
DELIMITER;

4
আপনি কি মনে করেন যে আপনি নিজের কোডটি কিছুটা সাফ করতে এবং মন্তব্য করতে পেরেছেন তাই এটি আরও কিছুটা বোধগম্য? ধন্যবাদ
ড্যারিল হেইন

1

এটি নির্ভর করে আপনি কীভাবে মাসের # সংজ্ঞায়িত করতে চান তার উপর নির্ভর করে। এই প্রশ্নের উত্তর দিন: 'মাসের মধ্যে পার্থক্য কী: ফেব্রুয়ারি 15, 2008 - মার্চ 12, ২০০৯'। এটি কি লিপ বছরের উপর নির্ভর করে # দিনের পরিষ্কার কাটা দ্বারা সংজ্ঞায়িত হয়- এটি কোন মাস, বা আগের মাসের একই দিন = 1 মাস month

দিনগুলির জন্য একটি গণনা :

ফেব্রুয়ারি 15 -> 29 (লিপ বছর) = 14 মার্চ 1, 2008 + 365 = মার্চ 1, ২০০৯. মার্চ 1 -> মার্চ 12 = 12 দিন। 14 + 365 + 12 = 391 দিন। মোট = 391 দিন / (মাসে গড় দিন = 30) = 13.03333 33

মাসের হিসাব :

ফেব্রুয়ারী 15 2008 - ফেব্রুয়ারি 15 2009 = 12 ফেব্রুয়ারি 15 -> মার্চ 12 = 1 মাসেরও কম কম = মোট 12 মাস, বা 13 ফেব্রুয়ারী 15 - মার্চ 12 'গত মাস' হিসাবে বিবেচিত



1

যথাযথতার সাথে আমার মাস-পার্থক্য দরকার। যদিও জেন বিয়েনের সমাধানটি সঠিক দিকে রয়েছে তবে তার দ্বিতীয় এবং তৃতীয় উদাহরণগুলি ভুল ফলাফল দেয়। ফেব্রুয়ারিতে একটি দিন ফেব্রুয়ারিতে দিনের সংখ্যা দ্বারা বিভক্ত হয়ে মে মাসের দিনের সংখ্যা দ্বারা বিভক্ত মে মাসে এক দিনের সমান হয় না। সুতরাং দ্বিতীয় উদাহরণটি আউটপুট করা উচিত ((31-5 + 1) / 31 + 13/30 =) 1.3043 এবং তৃতীয় উদাহরণ ((29-27 + 1) / 29 + 2/30 + 3 =) 3.1701।

আমি নিম্নলিখিত প্রশ্নের সাথে শেষ করেছি:

SELECT
    '2012-02-27' AS startdate,
    '2012-06-02' AS enddate,
    TIMESTAMPDIFF(DAY, (SELECT startdate), (SELECT enddate)) AS days,
    IF(MONTH((SELECT startdate)) = MONTH((SELECT enddate)), 0, (TIMESTAMPDIFF(DAY, (SELECT startdate), LAST_DAY((SELECT startdate)) + INTERVAL 1 DAY)) / DAY(LAST_DAY((SELECT startdate)))) AS period1,     
    TIMESTAMPDIFF(MONTH, LAST_DAY((SELECT startdate)) + INTERVAL 1 DAY, LAST_DAY((SELECT enddate))) AS period2,
    IF(MONTH((SELECT startdate)) = MONTH((SELECT enddate)), (SELECT days), DAY((SELECT enddate))) / DAY(LAST_DAY((SELECT enddate))) AS period3,
    (SELECT period1) + (SELECT period2) + (SELECT period3) AS months

1

PERIOD_DIFF () ফাংশন

অন্যতম উপায় হ'ল মাইএসকিউএল PERIOD_DIFF () দুটি পিরিয়ডের মধ্যে পার্থক্যটি প্রদান করে। পিরিয়ডগুলি একই ফরম্যাটে হওয়া উচিত YYYYMM বা YYmm। উল্লেখ্য যে পিরিয়ডগুলি তারিখের মান নয়।

কোড:

SELECT PERIOD_DIFF(200905,200811);

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


0

আপনি বছর, মাস এবং দিন এইভাবে পেতে পারেন:

SELECT 
username
,date_of_birth
,DATE_FORMAT(CURDATE(), '%Y') - DATE_FORMAT(date_of_birth, '%Y') - (DATE_FORMAT(CURDATE(), '00-%m-%d') < DATE_FORMAT(date_of_birth, '00-%m-%d')) AS years
,PERIOD_DIFF( DATE_FORMAT(CURDATE(), '%Y%m') , DATE_FORMAT(date_of_birth, '%Y%m') ) AS months
,DATEDIFF(CURDATE(),date_of_birth) AS days
FROM users

0

আপনি এটি ব্যবহার করে দেখতে পারেন:

select MONTH(NOW())-MONTH(table_date) as 'Total Month Difference' from table_name;

বা

select MONTH(Newer_date)-MONTH(Older_date) as 'Total Month Difference' from table_Name;

0

সহজ উত্তর প্রদত্ত তারিখটিকে ইনসফারম হিসাবে এবং শেষের তারিখ ইনস-টু হিসাবে দেওয়া হয়

SELECT convert(TIMESTAMPDIFF(year, ins_frm, ins_to),UNSIGNED) as yrs,
       mod(TIMESTAMPDIFF(MONTH, ins_frm, ins_to),12) mnths
FROM table_name

উপভোগ করুন :)))


0

এটা চেষ্টা কর

SELECT YEAR(end_date)*12 + MONTH(end_date) - (YEAR(start_date)*12 + MONTH(start_date))

স্ট্যাক ওভারফ্লোতে স্বাগতম! প্রশ্নগুলির তারিখ এবং বিদ্যমান উত্তরের একই সমাধান রয়েছে কিনা তা নিশ্চিত করে দেখুন।
লেহিস্টার

-1

এই ক্যোয়ারী আমার জন্য কাজ করেছে :)

SELECT * FROM tbl_purchase_receipt
WHERE purchase_date BETWEEN '2008-09-09' AND '2009-09-09'

এটি কেবল দুটি তারিখ নেয় এবং তাদের মধ্যে মানগুলি পুনরুদ্ধার করে।


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