Ik heb 2 datums (datetimes):
date1 = 2010-12-31 15:13:48.593
date2 = 2010-12-31 00:00:00.000
Het is dezelfde dag, alleen andere tijden. Het vergelijken van date1 en date2 met <= werkt niet vanwege de datum1 tijd. Dus date1 <= date2 is fout, maar zou waar moeten zijn. Kan ik ze vergelijken door alleen naar het jaar, de maand en de dag te kijken, zodat ze hetzelfde zijn? Zijn SQL Server 2008.
Bedankt 🙂
Antwoord 1, autoriteit 100%
SELECT CASE WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) ...
Moet doen wat je nodig hebt.
Testcase
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
Retourneren
COMPARISON_WITH_CAST | COMPARISON_WITHOUT_CAST
Y N
Antwoord 2, autoriteit 75%
Gebruik de functie DATEDIFF
met een datumdeel van day
.
SELECT ...
FROM ...
WHERE DATEDIFF(day, date1, date2) >= 0
Merk op dat als u die date1
<= date2
wilt testen, u die DATEDIFF(day, date1, date2) >= 0
, of u kunt ook DATEDIFF(day, date2, date1) <= 0
testen.
Antwoord 3, autoriteit 3%
De eenvoudige éénregelige oplossing is
datediff(dd,'2010-12-31 15:13:48.593','2010-12-31 00:00:00.000')=0
datediff(dd,'2010-12-31 15:13:48.593','2010-12-31 00:00:00.000')<=1
datediff(dd,'2010-12-31 15:13:48.593','2010-12-31 00:00:00.000')>=1
Je kunt hiermee verschillende opties proberen, behalve “dd”
Antwoord 4
Probeer dit:
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
Antwoord 5
Ik gebruik DateDiff(day,date1,date2) altijd om twee datums te vergelijken.
Afrekenen volgend voorbeeld. Kopieer dat gewoon en voer het uit op de SQL-server van mevrouw.
Probeer ook met de wijzigingsdatum vóór 31 dec tot 30 dec en controleer het resultaat
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