@didxga: Hati-hati: (akhir - awal) TIDAK mengembalikan selisih detik antara nilai datetime. Ini mengembalikan angka yang merupakan perbedaan antara angka desimal yang terlihat seperti yyyymmddhhmmss.
helloPiers
Jawaban:
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 formatSELECT TIMESTAMPDIFF(SECOND,'2007-12-30 12:01:01','2007-12-31 10:02:00');-- result: 79259 the difference in seconds
Jadi, Anda bisa menggunakannya TIMESTAMPDIFFuntuk tujuan Anda.
Apa arti "selisih detik dalam beberapa hari"? Saya tidak mengerti mengapa mengalikan hasil TIMEDIFFdengan 24*60*60tidak sama dengan hasil TIMESTAMPDIFF.
David Tuite
Solusi ini berhasil untuk saya! Tetapi dalam kasus saya, saya ingin melakukan TIMESTAMPDIFF di HARI, tetapi tidak mempertimbangkan akhir pekan (sat / sun). Maksudku, hanya perbedaan hari kerja ... Apakah mungkin dengan cara yang sederhana? Jika tidak, saya mohon maaf atas ketidaknyamanan ini maka saya akan mencari solusi lain. TKs.
Massa
8
TIMEDIFF dalam contoh ini salah karena itu bukan jumlah detik antara dua hari itu. TIMEDIFF mengembalikan nilai TIME, yang memiliki selisih jam, menit, dan detik. Mengalikannya tidak akan menghasilkan jawaban yang berguna. Gunakan TIMESTAMPDIFF.
IvanD
4
Menarik yang 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:
Sayang, itu sempurna untuk pertanyaan di atas, tetapi saya ingin beberapa modifikasi dengan permintaan yang sama jadi tolong bantu saya bahwa bagaimana bisa mencapainya. di sini saya ingin membandingkan hasil akhir dengan nilai saya, SELECT * FROM table where datediff(today,databasedate) as days =3;seperti ini
Sooraj Abbasi
9
SELECT TIMESTAMPDIFF(HOUR,NOW(),'2013-05-15 10:23:23')
calculates difference in hour.(for days--> you have to define day replacing hourSELECT DATEDIFF('2012-2-2','2012-2-1')SELECT TO_DAYS ('2012-2-2')-TO_DAYS('2012-2-1')
unix_timestamp - cara penetapan waktu standar dalam sistem mirip Unix. Merupakan integer 32-bit, menunjukkan berapa detik telah berlalu sejak 01/01/1970 00:00:00. Yaitu batas bawah. Batas atas dibatasi hingga 2.106 setahun, tetapi karena program yang sering tidak beroperasi dengan nilai ini (alih-alih bilangan bulat yang tidak ditandatangani menggunakan bilangan bulat yang ditandatangani) dianggap sebagai batas atas pada tahun 2038.
Devid G
+ ketika melewati DST salah dipotong / ditambahkan
TC ingin mendapatkan nilai hasil dalam detik atau milidetik.
Devid G
0
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
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 resultsset@StartDate ='2013-12-30'--birthdateset@EndDate = Getdate()--current datetime--calculate yearsselect@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 =casewhen datediff(month,@StartDate,@EndDate)-( datediff(year,@StartDate,@EndDate)*12)<0then-1else1end--decrease year by 1 if months are Overflowedselect@Years =casewhen@monthOverflow <0then@years-1 else@years endselect@months = datediff(month,@StartDate,@EndDate)-(@years *12)--as we do for month overflow criteria for days and hours --& minutes logic will followed same waydeclare@LastdayOfMonth int
select@LastdayOfMonth = datepart(d,DATEADD
(s,-1,DATEADD(mm, DATEDIFF(m,0,@EndDate)+1,0)))select@days =casewhen@monthOverflow<0and
DAY(@StartDate)> DAY(@EndDate)then@LastdayOfMonth +(datepart(d,@EndDate)- datepart(d,@StartDate))-1else datepart(d,@EndDate)- datepart(d,@StartDate)endselect@Months=casewhen@days <0or DAY(@StartDate)> DAY(@EndDate)then@Months-1 else@Months endDeclare@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 =casewhen(@lastdayBirthdate >@lastdayAsOnDate)then@lastdayBirthdate +@Days
else@lastdayAsOnDate +@Days
end)printconvert(varchar,@years)+' year(s), '+convert(varchar,@months)+' month(s), '+convert(varchar,@days)+' day(s) '
Mengapa tidak menggunakan saja TIMESTAMPDIFFfungsinya?
codeforester
0
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 isfor 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 isfor 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.
Waspadalah: (akhir - awal) TIDAK mengembalikan selisih detik antara nilai datetime. Ini mengembalikan angka yang merupakan perbedaan antara angka desimal yang terlihat seperti yyyymmddhhmmss.
Ini tidak mengembalikan perbedaan tanggal dalam hitungan detik, melainkan mengembalikan perbedaan antara angka desimal yang terlihat seperti yyyymmddhhmmss. Jadi, ini tidak menyelesaikan pertanyaan OP. Hal yang sama juga disebutkan dalam komentar pada pertanyaan.
Jawaban:
Jadi, Anda bisa menggunakannya
TIMESTAMPDIFF
untuk tujuan Anda.sumber
TIMEDIFF
dengan24*60*60
tidak sama dengan hasilTIMESTAMPDIFF
.TIMEDIFF()
mengharapkan argumen waktu mulai dan berakhir berada di urutan yang berlawanan dari yang diharapkan olehTIMESTAMPDIFF()
.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:
sumber
DATEDIFF
tidak mengembalikan pecahan.Dapatkan perbedaan tanggal dalam beberapa hari menggunakan DATEDIFF
ATAU
Lihat tautan di bawah ini perbedaan MySql antara dua cap waktu dalam beberapa hari?
sumber
SELECT * FROM table where datediff(today,databasedate) as days =3;
seperti inisumber
sumber
Pendekatan kedua
SELECT ( DATEDIFF('1993-02-20','1993-02-19')*( 24*60*60) )AS 'seccond';
sumber
Atau, Anda bisa menggunakan fungsi TIMEDIFF
sumber
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
sumber
OK itu tidak seperti yang diminta OP, tapi itu yang ingin saya lakukan :-)
sumber
Kode ini menghitung selisih antara dua tanggal dalam format dd MM tttt.
sumber
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:
% 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.
sumber
Anda cukup melakukan ini:
sumber
Kenapa tidak adil?
Pilih Jumlah (Date1 - Date2) dari tabel
date1 dan date2 adalah datetime
sumber