2つの日付(datetimes)があります。
date1 = 2010-12-31 15:13:48.59
date2 = 2010-12-31 00:00:00.0
その同じ日、ちょうど異なる時間。 date1時間のため、<=を使用してdate1とdate2を比較することはできません。したがって、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
DATEDIFF
関数を、day
の日付部分と共に使用します。
SELECT ...
FROM ...
WHERE DATEDIFF(day, date1, date2) >= 0
date1
<= date2
をテストする場合は、DATEDIFF(day, date1, date2) >= 0
をテストする必要があります。または、DATEDIFF(day, date2, date1) <= 0
をテストすることもできます。
シンプルな1行のソリューションは
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」以外のさまざまなオプションを試すことができます
私は常に2つの日付を比較するためにDateDiff(day、date1、date2)を使用しています。
次の例をご覧ください。それをコピーしてMs SQLサーバーで実行するだけです。また、変更日を31 decから30 decにして、結果を確認してください
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