İki tarih arasındaki farkı, formatta nasıl hesaplayabilir ve YYYY-MM-DD hh: mm: sssonucu saniye veya milisaniye olarak nasıl elde edebilirim?
İki tarih arasındaki farkı, formatta nasıl hesaplayabilir ve YYYY-MM-DD hh: mm: sssonucu saniye veya milisaniye olarak nasıl elde edebilirim?
Yanıtlar:
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
Böylece, TIMESTAMPDIFFamacınız için kullanabilirsiniz .
TIMEDIFFtarafından 24*60*60sonucuna eşit değildir TIMESTAMPDIFF.
TIMEDIFF()Başlangıç ve bitiş zamanı argümanlarının beklenenden ters sırada olmasını bekleyen ilginç TIMESTAMPDIFF().
DATE sütunlarıyla çalışıyorsanız (veya bunları tarih sütunları olarak yayınlayabiliyorsanız), DATEDIFF () öğesini deneyin ve ardından 24 saat, 60 dakika, 60 saniye ile çarpın (DATEDIFF gün cinsinden farklı olduğundan). MySQL'den:
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
Örneğin:
mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30 00:00:00') * 24*60*60
DATEDIFFkesirleri döndürmez.
DATEDIFF kullanarak günlerdeki tarih farkını alın
SELECT DATEDIFF('2010-10-08 18:23:13', '2010-09-21 21:40:36') AS days;
+------+
| days |
+------+
| 17 |
+------+
VEYA
Gün cinsinden iki zaman damgası arasındaki aşağıdaki bağlantı MySql farkına bakın ?
SELECT * FROM table where datediff(today,databasedate) as days =3;şey gibi son sonucu benim değer ile karşılaştırmak istiyorum
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');
İkinci yaklaşım
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
Veya, TIMEDIFF işlevini kullanabilirsiniz
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'
Bu işlev iki tarih arasındaki farkı alır ve bunu yyyy-aa-gg tarih biçiminde gösterir. Tek ihtiyacınız olan aşağıdaki kodu çalıştırmak ve daha sonra fonksiyonu kullanmaktır. Yürüttükten sonra şu şekilde kullanabilirsiniz
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;
Bu kod, yyyy AA gg biçimindeki iki tarih arasındaki farkı hesaplar.
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) '
TIMESTAMPDIFFişlevi kullanmıyorsunuz ?
Metin alanında dize olarak depolanan bir tarih varsa, bu kodu uygulayabilirsiniz; bu, hafta, ay veya yıl sıralamasında geçmiş gün sayısını listeler:
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, tarih biçiminizdir
Bu sorgu, şu şekilde ayarladığınız günler arasındaki kaydı gösterir: Son 7 günün altında ve son 14 günün üstünde, bu nedenle ay veya yıl için aynı kavramın görüntülenmesi son hafta kaydınız olacaktır. Aşağıdaki tarihte verdiğiniz değer ne olursa olsun: 7 günden az, böylece diğer değer 14 gün olarak iki katına çıkacaktır. Burada söylediklerimiz son 14 günden yukarıda ve son 7 günden itibaren tüm kayıtları alıyor. Bu, bir ay ve ayrıca bir yıl için değeri 30-60 gün olarak değiştirebileceğiniz bir haftalık kayıttır.
Teşekkür ederim Umarım birine yardımcı olur.
Bunu yapmanız yeterlidir:
SELECT (end_time - start_time) FROM t; -- return in Millisecond
SELECT (end_time - start_time)/1000 FROM t; -- return in Second
Neden sadece
Tablodan Toplamı (Tarih1 - Tarih2) seçin
tarih1 ve tarih2 datetime