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


173

বিন্যাসে YYYY-MM-DD hh: mm: ssএবং দুটি সেকেন্ডে বা মিলিসেকেন্ডে ফলাফল পেতে কীভাবে দুটি তারিখের মধ্যে পার্থক্য গণনা করবেন ?


14
@ ডিডএক্সগা: সাবধান: (শেষ - শুরু) তারিখের সময়ের মানগুলির মধ্যে এক সেকেন্ডের ব্যবধান ফেরায় না। এটি এমন একটি সংখ্যা ফেরত দেয় যা দশমিক সংখ্যার মধ্যে পার্থক্য যা yyyymmddhhmmss এর মতো দেখায়।
হ্যালোপিয়ার্স

উত্তর:


329
SELECT TIMEDIFF('2007-12-31 10:02:00','2007-12-30 12:01:01');
-- result: 22:00:59, the difference in HH:MM:SS format


SELECT TIMESTAMPDIFF(SECOND,'2007-12-30 12:01:01','2007-12-31 10:02:00'); 
-- result: 79259  the difference in seconds

সুতরাং, আপনি TIMESTAMPDIFFআপনার উদ্দেশ্যে ব্যবহার করতে পারেন ।


2
"দিনের জন্য কয়েক সেকেন্ডের পার্থক্য" এর অর্থ কী? আমি বুঝতে পারছি না কেন ফল গুন না TIMEDIFFদ্বারা 24*60*60ফল সমান নয় TIMESTAMPDIFF
ডেভিড টুয়েট

এই সমাধানটি আমার পক্ষে কাজ করেছিল! তবে আমার ক্ষেত্রে, আমি DAY তে TIMESTAMPDIFF সম্পাদন করতে চাই, তবে সাপ্তাহিক ছুটির দিন (স্যাট / রোদ) বিবেচনা করে না। মানে, কেবলমাত্র সপ্তাহের পার্থক্য ... এটি কি সহজ উপায়ে সম্ভব? যদি তা না হয় তবে আমি অসুবিধার জন্য ক্ষমাপ্রার্থী করি তবে আমি আর একটি সমাধান খুঁজব। TKs।
ম্যাসা

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

4
আকর্ষণীয় যা TIMEDIFF()প্রত্যাশার চেয়ে বিপরীত ক্রমে শুরু এবং শেষের সময় যুক্তি প্রত্যাশা করে TIMESTAMPDIFF()
এলএস

1
দ্রষ্টব্য: TIMEDIFF ফাংশনটি ব্যবহার করার সময়, সময় মান "-838: 59: 59" থেকে "838: 59: 59" পর্যন্ত হতে পারে range w3schools.com/SQl/func_mysql_timediff.asp
ক্রাইকার

38

আপনি যদি DATE কলামগুলির সাথে কাজ করছেন (বা তাদের তারিখ কলাম হিসাবে কাস্ট করতে পারেন), DATEDIFF () চেষ্টা করুন এবং তারপরে ২৪ ঘন্টা, 60০ মিনিট, by০ সেকেন্ড (যেহেতু DATEDIFF দিনগুলিতে পৃথক হয়) দ্বারা গুণান। মাইএসকিউএল থেকে:

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

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

mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30 00:00:00') * 24*60*60

5
আমি এই কাজ মনে করি না। DATEDIFFভগ্নাংশ ফিরে না।
হুয়ান কার্লোস ওরোপিজা

29

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

SELECT DATEDIFF('2010-10-08 18:23:13', '2010-09-21 21:40:36') AS days;
+------+
| days |
+------+
|   17 |
+------+

অথবা

দিনগুলিতে দুটি টাইমস্ট্যাম্পের মধ্যে নীচের লিঙ্কটি MySql পার্থক্যটি দেখুন?


প্রিয়, এটি উপরের প্রশ্নের জন্য নিখুঁত, তবে আমি একই প্রশ্নের সাথে কিছু সংশোধন চাই যাতে দয়া করে আমাকে কীভাবে তা অর্জন করতে পারে ive এখানে আমি শেষের SELECT * FROM table where datediff(today,databasedate) as days =3;
ফলাফলটিকে

9
SELECT TIMESTAMPDIFF(HOUR,NOW(),'2013-05-15 10:23:23')
   calculates difference in hour.(for days--> you have to define day replacing hour
SELECT DATEDIFF('2012-2-2','2012-2-1')

SELECT TO_DAYS ('2012-2-2')-TO_DAYS('2012-2-1')

4
select 
unix_timestamp('2007-12-30 00:00:00') - 
unix_timestamp('2007-11-30 00:00:00');

3
unix_টাইমস্ট্যাম্প - ইউনিক্সের মতো সিস্টেমে সময় নির্ধারণের একটি মানক উপায়। একটি 32-বিট পূর্ণসংখ্যার প্রতিনিধিত্ব করে, 01/01/1970 00:00:00 থেকে কত সেকেন্ড পেরিয়ে গেছে তা নির্দেশ করে। অর্থাত্ একটি নিম্ন সীমা। উপরের সীমানাটি বছরে ২,১০6 এর মধ্যে সীমাবদ্ধ, তবে ঘন ঘন প্রোগ্রামগুলির কারণে এই মানটি পরিচালিত হয় না (স্বাক্ষরিত পূর্ণসংখ্যার সাহায্যে স্বাক্ষরিত পূর্ণসংখ্যার পরিবর্তে) ২০৩৮ সালে উপরের সীমা হিসাবে বিবেচিত হয়।
ডেভিড জি

+ যখন ডিএসটি দিয়ে যাবার সময় ভুলভাবে কর্তন / যোগ করা হয়
ডেভিড জি

1
SELECT TIMESTAMPDIFF(SECOND,'2018-01-19 14:17:15','2018-01-20 14:17:15');

দ্বিতীয় পন্থা

SELECT ( DATEDIFF('1993-02-20','1993-02-19')*( 24*60*60) )AS 'seccond';

CURRENT_TIME() --this will return current Date
DATEDIFF('','') --this function will return  DAYS and in 1 day there are 24hh 60mm 60sec

0

অথবা, আপনি টিআইএমডিআইএফএফ ফাংশন ব্যবহার করতে পারেন

mysql> SELECT TIMEDIFF('2000:01:01 00:00:00', '2000:01:01 00:00:00.000001');
'-00:00:00.000001'
mysql> SELECT TIMEDIFF('2008-12-31 23:59:59.000001' , '2008-12-30 01:01:01.000002');
 '46:58:57.999999'

টিসি সেকেন্ড বা মিলিসেকেন্ডে ফলাফলের মান পেতে চায়।
ডেভিড জি

0

এই ফাংশনটি দুটি তারিখের মধ্যে পার্থক্য নেয় এবং তা yyyy-mm-dd তারিখের ফর্ম্যাটে দেখায়। আপনার কেবলমাত্র নীচের কোডটি কার্যকর করা এবং তারপরে ফাংশনটি ব্যবহার করা দরকার। এক্সিকিউট করার পরে আপনি এটি এটি ব্যবহার করতে পারেন

SELECT datedifference(date1, date2)
FROM ....
.
.
.
.


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;

0
select TO_CHAR(TRUNC(SYSDATE)+(to_date( '31-MAY-2012 12:25', 'DD-MON-YYYY HH24:MI') 
                             - to_date( '31-MAY-2012 10:37', 'DD-MON-YYYY HH24:MI')), 
        'HH24:MI:SS') from dual

- ফলাফল: 01:48:00 |

ঠিক আছে এটি ওপি যা বলেছিল তা নয়, তবে এটি আমি করতে চেয়েছিলাম :-)


0

এই কোডটি yyyy এমএম ডিডি ফর্ম্যাটে দুটি তারিখের মধ্যে পার্থক্য গণনা করে।

declare @StartDate datetime 
declare @EndDate datetime

declare @years int
declare @months int 
declare @days int

--NOTE: date of birth must be smaller than As on date, 
--else it could produce wrong results
set @StartDate = '2013-12-30' --birthdate
set @EndDate  = Getdate()            --current datetime

--calculate years
select @years = datediff(year,@StartDate,@EndDate)

--calculate months if it's value is negative then it 
--indicates after __ months; __ years will be complete
--To resolve this, we have taken a flag @MonthOverflow...
declare @monthOverflow int
select @monthOverflow = case when datediff(month,@StartDate,@EndDate) - 
  ( datediff(year,@StartDate,@EndDate) * 12) <0 then -1 else 1 end
--decrease year by 1 if months are Overflowed
select @Years = case when @monthOverflow < 0 then @years-1 else @years end
select @months =  datediff(month,@StartDate,@EndDate) - (@years * 12) 

--as we do for month overflow criteria for days and hours 
--& minutes logic will followed same way
declare @LastdayOfMonth int
select @LastdayOfMonth =  datepart(d,DATEADD
    (s,-1,DATEADD(mm, DATEDIFF(m,0,@EndDate)+1,0)))

select @days = case when @monthOverflow<0 and 
    DAY(@StartDate)> DAY(@EndDate) 
then @LastdayOfMonth + 
  (datepart(d,@EndDate) - datepart(d,@StartDate) ) - 1  
      else datepart(d,@EndDate) - datepart(d,@StartDate) end 


select
 @Months=case when @days < 0 or DAY(@StartDate)> DAY(@EndDate) then @Months-1 else @Months end

Declare @lastdayAsOnDate int;
set @lastdayAsOnDate = datepart(d,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@EndDate),0)));
Declare @lastdayBirthdate int;
set @lastdayBirthdate =  datepart(d,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@StartDate)+1,0)));

if (@Days < 0) 
(
    select @Days = case when( @lastdayBirthdate > @lastdayAsOnDate) then
        @lastdayBirthdate + @Days
    else
        @lastdayAsOnDate + @Days
    end
)
print  convert(varchar,@years)   + ' year(s),   '  +
       convert(varchar,@months)  + ' month(s),   ' +
       convert(varchar,@days)    + ' day(s)   '   

কেন কেবল TIMESTAMPDIFFফাংশনটি ব্যবহার করবেন না ?
কোডফোরস্টার

0

আপনি যদি স্ট্রিং হিসাবে পাঠ্য ক্ষেত্রে সংরক্ষণের তারিখটি রেখে থাকেন তবে আপনি এই কোডটি প্রয়োগ করতে পারেন এটি সপ্তাহের এক মাস, এক বছরের বা এক বছরের বাছাইয়ের অতীতের দিনের তালিকা আনবে:

SELECT * FROM `table` WHERE STR_TO_DATE(mydate, '%d/%m/%Y') < CURDATE() - INTERVAL 30 DAY AND STR_TO_DATE(date, '%d/%m/%Y') > CURDATE() - INTERVAL 60 DAY

//This is for a month

SELECT * FROM `table` WHERE STR_TO_DATE(mydate, '%d/%m/%Y') < CURDATE() - INTERVAL 7 DAY AND STR_TO_DATE(date, '%d/%m/%Y') > CURDATE() - INTERVAL 14 DAY

//This is for a week 

% d% m% Y আপনার তারিখের ফর্ম্যাট

এই কোয়েরিটি আপনি যে দিনগুলিতে সেট করেছেন সেই দিনের মধ্যে রেকর্ড প্রদর্শন করে: গত 7 দিনের নীচে এবং গত 14 দিনের উপরে তাই আপনার ধারণাগুলি একই মাসের বা বছরের জন্য প্রদর্শন করা আপনার শেষ সপ্তাহের রেকর্ড হবে। নীচের তারিখের মতো আপনি যে পরিমাণ মান সরবরাহ করছেন তা যেমন: নীচে 7-দিন থেকে অন্য মানটি 14 দিনের হিসাবে তার দ্বিগুণ হবে। আমরা এখানে যা বলছি তা গত 14 দিনের উপরে এবং গত 7 দিনের নীচে সমস্ত রেকর্ড পান। এটি এক সপ্তাহের রেকর্ড যা আপনি এক মাসের জন্য এবং এক বছরের জন্য 30-60 দিনের মান পরিবর্তন করতে পারেন।

আপনাকে ধন্যবাদ আশা করি এটি কারও সাহায্য করবে।


-1

আপনি কেবল এটি করতে হবে:

SELECT (end_time - start_time) FROM t; -- return in Millisecond
SELECT (end_time - start_time)/1000 FROM t; -- return in Second

5
সাবধান: (শেষ - শুরু) তারিখের সময়ের মানগুলির মধ্যে এক সেকেন্ডের ব্যবধান ফেরায় না। এটি এমন একটি সংখ্যা ফেরত দেয় যা দশমিক সংখ্যার মধ্যে পার্থক্য যা yyyymmddhhmmss এর মতো দেখায়।
হ্যালোপিয়ার্স

-1

শুধু না কেন

সারণী থেকে যোগফল (তারিখ 1 - তারিখ 2) নির্বাচন করুন

তারিখ 1 এবং তারিখ 2 তারিখের সময়


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