Bagaimana cara menghitung perbedaan antara dua tanggal, dalam format YYYY-MM-DD hh: mm: ss
dan untuk mendapatkan hasilnya dalam detik atau milidetik?
Bagaimana cara menghitung perbedaan antara dua tanggal, dalam format YYYY-MM-DD hh: mm: ss
dan untuk mendapatkan hasilnya dalam detik atau milidetik?
Jawaban:
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
Jadi, Anda bisa menggunakannya TIMESTAMPDIFF
untuk tujuan Anda.
TIMEDIFF
dengan 24*60*60
tidak sama dengan hasil TIMESTAMPDIFF
.
TIMEDIFF()
mengharapkan argumen waktu mulai dan berakhir berada di urutan yang berlawanan dari yang diharapkan oleh TIMESTAMPDIFF()
.
Jika Anda bekerja dengan kolom DATE (atau dapat menampilkannya sebagai kolom tanggal), coba DATEIFF () dan kemudian kalikan dengan 24 jam, 60 menit, 60 detik (karena DATEIFF mengembalikan perbedaan dalam beberapa hari). Dari MySQL:
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
sebagai contoh:
mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30 00:00:00') * 24*60*60
DATEDIFF
tidak mengembalikan pecahan.
Dapatkan perbedaan tanggal dalam beberapa hari menggunakan DATEDIFF
SELECT DATEDIFF('2010-10-08 18:23:13', '2010-09-21 21:40:36') AS days;
+------+
| days |
+------+
| 17 |
+------+
ATAU
Lihat tautan di bawah ini perbedaan MySql antara dua cap waktu dalam beberapa hari?
SELECT * FROM table where datediff(today,databasedate) as days =3;
seperti ini
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');
Pendekatan kedua
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
Atau, Anda bisa menggunakan fungsi 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'
Fungsi ini mengambil perbedaan antara dua tanggal dan menunjukkannya dalam format tanggal yyyy-mm-dd. Yang Anda butuhkan hanyalah menjalankan kode di bawah ini dan kemudian menggunakan fungsinya. Setelah mengeksekusi Anda dapat menggunakannya seperti ini
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;
Kode ini menghitung selisih antara dua tanggal dalam format dd MM tttt.
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
fungsinya?
Jika Anda memiliki tanggal yang disimpan dalam bidang teks sebagai string, Anda dapat menerapkan kode ini. Ini akan mengambil daftar jumlah hari terakhir dalam seminggu, sebulan atau setahun yang menyortir:
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 adalah format tanggal Anda
Kueri ini menampilkan catatan antara hari-hari yang Anda atur di sana seperti: Di bawah dari 7 hari terakhir dan Di atas dari 14 hari terakhir sehingga akan menjadi catatan minggu terakhir Anda untuk menampilkan konsep yang sama untuk bulan atau tahun. Nilai apa pun yang Anda berikan dalam tanggal di bawah ini seperti: di bawah ini dari 7-hari sehingga nilai lainnya akan menjadi dua kali lipat dari 14 hari. Apa yang kami katakan di sini dapatkan semua catatan di atas dari 14 hari terakhir dan di bawah ini dari 7 hari terakhir. Ini adalah catatan minggu Anda dapat mengubah nilai menjadi 30-60 hari selama sebulan dan juga selama setahun.
Terima Kasih Semoga ini bisa membantu seseorang.
Anda cukup melakukan ini:
SELECT (end_time - start_time) FROM t; -- return in Millisecond
SELECT (end_time - start_time)/1000 FROM t; -- return in Second
Kenapa tidak adil?
Pilih Jumlah (Date1 - Date2) dari tabel
date1 dan date2 adalah datetime