1つのテーブルから前日のすべての行を選択するための適切なSQLステートメントを探しています。テーブルは1つの日時列を保持します。SQL Server 2005を使用しています。
1つのテーブルから前日のすべての行を選択するための適切なSQLステートメントを探しています。テーブルは1つの日時列を保持します。SQL Server 2005を使用しています。
回答:
今日は時間がない:
SELECT dateadd(day,datediff(day,0,GETDATE()),0)
昨日の時間がない:
SELECT dateadd(day,datediff(day,1,GETDATE()),0)
昨日だけのすべての行を照会します。
select
*
from yourTable
WHERE YourDate >= dateadd(day,datediff(day,1,GETDATE()),0)
AND YourDate < dateadd(day,datediff(day,0,GETDATE()),0)
SELECT getdate(),dateadd(day,datediff(day,1,GETDATE()),0)
、私が得る:2016-02-01 10:27:54.733 2016-01-31 00:00:00.000
SQLで「今日」の値を取得するには:
convert(date, GETDATE())
「昨日」を取得するには:
DATEADD(day, -1, convert(date, GETDATE()))
「今日-X日」を取得するには、-1を-Xに変更します。
したがって、昨日のすべての行について、次のようになります。
select * from tablename
where date >= DATEADD(day, -1, convert(date, GETDATE()))
and date < convert(date, GETDATE())
明らかな答えが欠けていたようです。列(DatetimeColumn)がタイムスタンプ付きの日時であるテーブル(Ttable)からすべてのデータを取得するには、次のクエリを使用できます。
SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
これは、今日、先月、昨年などに簡単に変更できます。
DatetimeColumn BETWEEN DATEADD(day, DATEDIFF(day, 1, GETDATE()) ,0) AND DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
、それは各行のDATEDIFF()を評価する必要があるため、
これはそれを行うはずです:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
SQL Serverでは、次のようにします。
where cast(columnName as date) = cast(getdate() -1 as date)
時間のフォーマットに関する問題を回避するには、式の両側を日付にキャストする必要があります。
間隔をより詳細に制御する必要がある場合は、次のようなことを試してください。
declare @start datetime = cast(getdate() - 1 as date)
declare @end datetime = cast(getdate() - 1 as date)
set @end = dateadd(second, 86399, @end)
「昨日」を伝える別の方法...
Select * from TABLE
where Day(DateField) = (Day(GetDate())-1)
and Month(DateField) = (Month(GetDate()))
and Year(DateField) = (Year(getdate()))
これはおそらく、1月1日と毎月の最初の日にはうまく機能しません。しかし、その場でそれは効果的です。
SELECT *
元の時刻で日付を返します。