दो तिथियों के बीच के प्रारूप में 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 () का प्रयास करें और फिर 24 घंटे, 60 मिनट, 60 सेकंड (जब से DatedIFF रिटर्न दिनों में भिन्न होते हैं) से गुणा करें। MySQL से:
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
does not अंशों को लौटाना।
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
या, आप TIMEDIFF फ़ंक्शन का उपयोग कर सकते हैं
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 MM dd प्रारूप में दो तिथियों के बीच अंतर की गणना करता है।
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
सिर्फ क्यों नहीं
तालिका से Sum (Date1 - Date2) का चयन करें
तारीख 1 और तारीख 2 डेटाइम हैं