반응형
SQL Server를 사용하여 날짜 비교
다음 두 가지 날짜(날짜 시간)가 있습니다.
날짜 1 = 2010-12-31 15:13:48.593
날짜 2 = 2010-12-3100:00:00.000
같은 날, 그냥 다른 시간.<=>를 사용하여 date1과 date2를 비교하는 것은 date1 시간 때문에 작동하지 않습니다.따라서 date1 <= date2는 틀리지만 사실이어야 합니다.연도, 월, 일만 보고 동일하게 비교해도 될까요?바로 SQL Server 2008입니다.
SELECT CASE WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) ...
당신이 필요한 것을 해야 합니다.
테스트 케이스
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
돌아온다
COMPARISON_WITH_CAST | COMPARISON_WITHOUT_CAST
Y N
다음 날짜 부분과 함께 함수 사용day
.
SELECT ...
FROM ...
WHERE DATEDIFF(day, date1, date2) >= 0
만약 당신이 그것을 테스트하고 싶다면 참고하세요.date1
<=date2
그렇다면 당신은 그것을 테스트할 필요가 있습니다.DATEDIFF(day, date1, date2) >= 0
아니면 테스트할 수도 있습니다.DATEDIFF(day, date2, date1) <= 0
.
간단한 한 줄 솔루션은
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
"dd" 이외의 다른 옵션을 사용하여 다양한 옵션을 시도할 수 있습니다.
두 날짜를 비교할 때 항상 DateDiff(day, date1, date2)를 사용합니다.
다음 예를 확인합니다.그것을 복사해서 Msql server에서 실행하면 됩니다.또한 31일부터 30일까지 변경하여 결과를 확인합니다.
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
사용:
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
SQL에서 다음 스크립트를 사용하고 있으며 잘 작동하고 있습니다.
SELECT
ID ,
CASE
WHEN DATEDIFF(day, ExpectedDate, ActualDate) < 0
THEN 'Late'
ELSE 'OnTime'
END shipmentStatus
FROM orders
ORDER BY ExpectedDate
언급URL : https://stackoverflow.com/questions/4794028/compare-dates-using-sql-server
반응형
'programing' 카테고리의 다른 글
R의 빈 벡터에 값을 추가하시겠습니까? (0) | 2023.05.06 |
---|---|
스타일을 변경하지 않고 셀 내용을 지울 수 있습니까? (0) | 2023.05.06 |
Windows AppFabric이란 무엇입니까? (0) | 2023.05.06 |
항상 맨 위에 있는 WPF (0) | 2023.05.06 |
Server.UrlEncode 대Http 유틸리티.UrlEncode (0) | 2023.05.06 |