web-dev-qa-db-ja.com

MS SQLは日付を比較しますか?

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。

ありがとう:)

78
grady
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
80
Martin Smith

DATEDIFF 関数を、dayの日付部分と共に使用します。

SELECT ...
FROM ...
WHERE DATEDIFF(day, date1, date2) >= 0

date1 <= date2をテストする場合は、DATEDIFF(day, date1, date2) >= 0をテストする必要があります。または、DATEDIFF(day, date2, date1) <= 0をテストすることもできます。

62
LukeH

シンプルな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」以外のさまざまなオプションを試すことができます

3
Sarathi B

私は常に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
0
Jignesh Darji