Mam 2 daty (godziny):
data1 = 2010-12-31 15: 13: 48.593
data2 = 2010-12-31 00: 00: 00.000
Jest tego samego dnia, tylko o różnych porach. Porównanie daty1 i daty2 przy użyciu <= nie działa z powodu daty1 i godziny. Więc data1 <= data2 jest nieprawidłowa, ale powinna być prawdziwa. Czy mogę je porównać, patrząc po prostu na rok, miesiąc i dzień, aby były takie same? Jego SQL Server 2008.
Dzięki :)
sql-server
tsql
sql-server-2008
date
grady
źródło
źródło
Odpowiedzi:
SELECT CASE WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) ...
Powinien zrobić to, czego potrzebujesz.
Przypadek testowy
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
Zwroty
źródło
DATE
typ nie był dostępny przed SQL Server 2008.Użyj
DATEDIFF
funkcji z częścią datyday
.SELECT ... FROM ... WHERE DATEDIFF(day, date1, date2) >= 0
Zauważ, że jeśli chcesz przetestować, że
date1
<=date2
, musisz to przetestowaćDATEDIFF(day, date1, date2) >= 0
, lub alternatywnie możesz przetestowaćDATEDIFF(day, date2, date1) <= 0
.źródło
date1
adate2
; czyli liczba nocy, przez które trzeba przejść, aby przejść oddate1
dodate2
Prostym rozwiązaniem jest jedna linia
Możesz wypróbować różne opcje z tą inną niż „dd”
źródło
Spróbuj tego:
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
źródło
Zawsze używam DateDiff (dzień, data1, data2) do porównania dwóch dat.
Do kasy następujący przykład. Po prostu skopiuj to i uruchom na serwerze Ms sql. Spróbuj też zmienić datę od 31 grudnia na 30 grudnia i sprawdź wynik
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
źródło