বিন্যাসে YYYY-MM-DD hh: mm: ss
এবং দুটি সেকেন্ডে বা মিলিসেকেন্ডে ফলাফল পেতে কীভাবে দুটি তারিখের মধ্যে পার্থক্য গণনা করবেন ?
বিন্যাসে YYYY-MM-DD hh: mm: ss
এবং দুটি সেকেন্ডে বা মিলিসেকেন্ডে ফলাফল পেতে কীভাবে দুটি তারিখের মধ্যে পার্থক্য গণনা করবেন ?
উত্তর:
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
আপনার উদ্দেশ্যে ব্যবহার করতে পারেন ।
TIMEDIFF
দ্বারা 24*60*60
ফল সমান নয় TIMESTAMPDIFF
।
TIMEDIFF()
প্রত্যাশার চেয়ে বিপরীত ক্রমে শুরু এবং শেষের সময় যুক্তি প্রত্যাশা করে TIMESTAMPDIFF()
।
আপনি যদি 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
DATEDIFF
ভগ্নাংশ ফিরে না।
DATEDIFF ব্যবহার করে দিনের মধ্যে তারিখের পার্থক্য পান
SELECT DATEDIFF('2010-10-08 18:23:13', '2010-09-21 21:40:36') AS days;
+------+
| days |
+------+
| 17 |
+------+
অথবা
দিনগুলিতে দুটি টাইমস্ট্যাম্পের মধ্যে নীচের লিঙ্কটি MySql পার্থক্যটি দেখুন?
SELECT * FROM table where datediff(today,databasedate) as days =3;
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')
select
unix_timestamp('2007-12-30 00:00:00') -
unix_timestamp('2007-11-30 00:00:00');
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
অথবা, আপনি টিআইএমডিআইএফএফ ফাংশন ব্যবহার করতে পারেন
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'
এই ফাংশনটি দুটি তারিখের মধ্যে পার্থক্য নেয় এবং তা 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;
এই কোডটি 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
ফাংশনটি ব্যবহার করবেন না ?
আপনি যদি স্ট্রিং হিসাবে পাঠ্য ক্ষেত্রে সংরক্ষণের তারিখটি রেখে থাকেন তবে আপনি এই কোডটি প্রয়োগ করতে পারেন এটি সপ্তাহের এক মাস, এক বছরের বা এক বছরের বাছাইয়ের অতীতের দিনের তালিকা আনবে:
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 দিনের মান পরিবর্তন করতে পারেন।
আপনাকে ধন্যবাদ আশা করি এটি কারও সাহায্য করবে।
আপনি কেবল এটি করতে হবে:
SELECT (end_time - start_time) FROM t; -- return in Millisecond
SELECT (end_time - start_time)/1000 FROM t; -- return in Second
শুধু না কেন
সারণী থেকে যোগফল (তারিখ 1 - তারিখ 2) নির্বাচন করুন
তারিখ 1 এবং তারিখ 2 তারিখের সময়