0

次の列を含むテーブルで前日のレコードを取得するパッケージセットアップで次のクエリを実行しました。

url, author, dateadded

これで、追加された日付は次のような日時形式になります。2012-08-23 23:58:42.000およびクエリは次のようになります。

SELECT [authorUrl],[author],
[dateadded]
FROM [Feeds].[dbo].[DataFeed]
where dateadded  > dateadd(day,datediff(day, 0, getdate()-1), 0)  
and dateadded  < dateadd(day,datediff(day, 0, getDate()), 0)

現在、このクエリの数は、日付を挿入するために毎日変更する必要がある次のクエリの数と一致しません。

SELECT [authorUrl]
  ,[author]
       ,[dateadded]
FROM [Feeds].[dbo].[DataFeed]
where dateadded > '2012-08-22 23:59:59' and dateadded < '2012-08-23 23:59:59' 

ここに欠けているものはありますか?

おそらく、dateadded列は私が編集した(アプリから挿入された)列であり、SQL自体によって自動挿入された日付ではないことを強調する必要があります。

4

1 に答える 1

1

日付範囲に奇妙なエッジや不必要に複雑な式を使用するのはやめましょう。あなたは2008年にいるので、昨日を取得する適切な方法は次のとおりです。

DECLARE @d DATE = SYSDATETIME();

SELECT ... FROM ... 
  WHERE DateAdded >= DATEADD(DAY, -1, @d) 
  AND DateAdded < @d;

または、SQL Server 2008がこのクエリを引数可能にするという事実を利用することもできます(これは、想像できる他のほとんどすべての場合には機能しません)。

SELECT ... FROM ...
  WHERE CONVERT(DATE, DateAdded) 
    = DATEADD(DAY, -1, CONVERT(DATE, SYSDATETIME()));
于 2012-08-24T16:41:26.470 に答える