配達日が今日のSQL Serverデータベースからレコードを取得するレポートを作成しようとしています。
私はもう試した
select * from (tablename)
where delivery_date = getdate()
エラーは発生しませんでしたが、レコードも発生しませんでした。
私はそれがすべての日付が次のようなものだからだと仮定しています:
2016-03-15 00:00:00.000
おそらく、タイムスタンプを削除するために日付を切り捨ててから試す必要がありますか?
以下のようなクエリを試すことができます
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)
うまくいくでしょう。
Delivery_dateが常に真夜中(00:00:00.000
)、次のように比較します。
select * from (tablename)
where delivery_date = datediff(d, 0, getdate())
このようにdatediff
を使用すると、日時値の時刻部分を切り捨てる簡単な方法になります。
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
これを試して:
DECLARE @Today DATETIME
SET @Today= CONVERT(date, getdate())
select * from (tablename)
where delivery_date = @Today
Delivery_dateフィールドの時刻部分とGETDATE()値を削除する必要があります。
SELECT *
FROM (tablename)
WHERE DATEADD(dd, DATEDIFF(dd, 0, delivery_date), 0) = DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)