Saya memiliki 2 tanggal (waktu):
date1 = 2010-12-31 15: 13: 48.593
date2 = 2010-12-31 00: 00: 00.000
Ini hari yang sama, hanya waktu yang berbeda. Membandingkan tanggal1 dan tanggal2 menggunakan <= tidak berfungsi karena waktu tanggal1. Jadi tanggal1 <= tanggal2 salah, tetapi seharusnya benar. Dapatkah saya membandingkannya dengan hanya melihat tahun, bulan, dan hari sehingga sama? SQL Server 2008-nya.
Terima kasih :)
sql-server
tsql
sql-server-2008
date
grady
sumber
sumber
Jawaban:
SELECT CASE WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) ...
Harus melakukan apa yang Anda butuhkan.
Kasus cobaan
WITH dates(date1, date2, date3, date4) AS (SELECT CAST('20101231 15:13:48.593' AS DATETIME), CAST('20101231 00:00:00.000' AS DATETIME), CAST('20101231 15:13:48.593' AS DATETIME), CAST('20101231 00:00:00.000' AS DATETIME)) SELECT CASE WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) THEN 'Y' ELSE 'N' END AS COMPARISON_WITH_CAST, CASE WHEN date3 <= date4 THEN 'Y' ELSE 'N' END AS COMPARISON_WITHOUT_CAST FROM dates
Kembali
sumber
DATE
tipe tidak tersedia sebelum SQL Server 2008.Gunakan
DATEDIFF
fungsi dengan bagian dataday
.SELECT ... FROM ... WHERE DATEDIFF(day, date1, date2) >= 0
Perhatikan bahwa jika Anda ingin menguji
date1
<=date2
maka Anda perlu mengujinyaDATEDIFF(day, date1, date2) >= 0
, atau sebagai alternatif, Anda dapat mengujinyaDATEDIFF(day, date2, date1) <= 0
.sumber
date1
dandate2
; yaitu, jumlah tengah malam yang akan Anda lalui untuk pergidate1
kedate2
Solusi satu baris yang sederhana adalah
Anda dapat mencoba berbagai opsi dengan ini selain "dd"
sumber
Coba ini:
BEGIN declare @Date1 datetime declare @Date2 datetime declare @chkYear int declare @chkMonth int declare @chkDay int declare @chkHour int declare @chkMinute int declare @chkSecond int declare @chkMiliSecond int set @Date1='2010-12-31 15:13:48.593' set @Date2='2010-12-31 00:00:00.000' set @chkYear=datediff(yyyy,@Date1,@Date2) set @chkMonth=datediff(mm,@Date1,@Date2) set @chkDay=datediff(dd,@Date1,@Date2) set @chkHour=datediff(hh,@Date1,@Date2) set @chkMinute=datediff(mi,@Date1,@Date2) set @chkSecond=datediff(ss,@Date1,@Date2) set @chkMiliSecond=datediff(ms,@Date1,@Date2) if @chkYear=0 AND @chkMonth=0 AND @chkDay=0 AND @chkHour=0 AND @chkMinute=0 AND @chkSecond=0 AND @chkMiliSecond=0 Begin Print 'Both Date is Same' end else Begin Print 'Both Date is not Same' end End
sumber
Saya selalu menggunakan DateDiff (hari, tanggal1, tanggal2) untuk membandingkan dua tanggal.
Lihat contoh berikut. Cukup salin itu dan jalankan di server Ms sql. Selain itu, coba ubah tanggal 31 Desember menjadi 30 Desember dan periksa hasilnya
BEGIN declare @firstDate datetime declare @secondDate datetime declare @chkDay int set @firstDate ='2010-12-31 15:13:48.593' set @secondDate ='2010-12-31 00:00:00.000' set @chkDay=Datediff(day,@firstDate ,@secondDate ) if @chkDay=0 Begin Print 'Date is Same' end else Begin Print 'Date is not Same' end End
sumber