web-dev-qa-db-ja.com

納期が今日の場合に日付部分のみを比較する方法

配達日が今日のSQL Serverデータベースからレコードを取得するレポートを作成しようとしています。

私はもう試した

select * from (tablename)
where delivery_date = getdate()

エラーは発生しませんでしたが、レコードも発生しませんでした。

私はそれがすべての日付が次のようなものだからだと仮定しています:

2016-03-15 00:00:00.000

おそらく、タイムスタンプを削除するために日付を切り捨ててから試す必要がありますか?

14
user1777929

以下のようなクエリを試すことができます

select * from (tablename)
where CAST(delivery_date as date) = CAST(getdate() as date)

また、すべての配達日が00:00:00.000確かに

select * from (tablename)
where delivery_date = CAST(getdate() as date) 

うまくいくでしょう。

37
DhruvJoshi

Delivery_dateが常に真夜中(00:00:00.000)、次のように比較します。

select * from (tablename)
where delivery_date = datediff(d, 0, getdate())

このようにdatediffを使用すると、日時値の時刻部分を切り捨てる簡単な方法になります。

3
SlimsGhost

2つのパラメーターを作成するだけです。 1つはStartTimeに、もう1つはEndTimeに使用し、クエリで使用します。

DECLARE @StartTime DATETIME,
        @EndTime DATETIME 

SET @StartTime = DATEDIFF(d,0,GETDATE())
SET @EndTime = DATEADD(d,1,@StartTime)

SELECT  *
FROM    [tablename]
WHERE   delivery_date >= @StartTime
        AND delivery_date < @EndTime
2
JamieD77

これを試して:

DECLARE @Today DATETIME
SET @Today= CONVERT(date, getdate())

select * from (tablename)
where delivery_date = @Today
0
Rajashekar V

Delivery_dateフィールドの時刻部分とGETDATE()値を削除する必要があります。

SELECT *
FROM  (tablename)
WHERE DATEADD(dd, DATEDIFF(dd, 0, delivery_date), 0) = DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)
0
M. Ruiz