2009-10-01 6 views

答えて

148

は、今日は時間を取得していない:

SELECT dateadd(day,datediff(day,0,GETDATE()),0) 

は時間をyestersdayない取得:からすべての行について

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) 
+0

それでも時間が必要な場合は? – Neo

+0

@ashuthinks、あなたのコメントは私には意味がありません。元の質問は、前日から行を取得する方法を尋ねます。これを行うには、今日の日付のみ(時間なし)と昨日の日付(時間なし)を取得する必要があります。これらの(時代を超越した)日付は 'WHERE'節で使用します。しかし、 'SELECT *'は元の時刻の日付を返します。 –

+0

datediffは「不正なパラメータ・カウント・エラー」を示します。 http://stackoverflow.com/a/18926156/3007408によれば、datediffは2つのパラメータしか使用できません。任意の解決策? – Sp0T

4

を使用していますと、今、それをテストすることはできませんが、:

select * from tablename where date >= dateadd(day, datediff(day, 1, getdate()), 0) and date < dateadd(day, datediff(day, 0, getdate()), 0) 
26

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()) 
+0

「日付」データ型:あなたは、より詳細に間隔を制御する必要がある場合

、あなたのような何かを試してみてください午前0時から午後12時までではなく、あなたがクエリを実行した時から発生 – rudimenter

+1

私の間違い。私はあなたがSQL Server 2005を扱っているのを見ていませんでした。実際、私のコードはSQL Server 2008のみで動作します。 – Konamiman

+0

私はいつもDATEADD(日、....)は無駄だったと思って、日付に対して日数を加えたり引いたりしてください:_SELECT GETDATE() - 1_ –

5

これは本当に古いスレッドですが、ここにそれがあります。 2つの異なる節ではなく、1つ以上の節。私は以下の構文をA日付からレコードを選択するために使用します。あなたが日付範囲を望むなら、前の答えが行く方法です。

SELECT * FROM TABLE_NAME WHERE 
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0 

それを伝えるために別の方法として、 "昨日" 以上の場合Xはなり-1昨日の記録

7
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY); 
1

のために...

Select * from TABLE 
where Day(DateField) = (Day(GetDate())-1) 
and Month(DateField) = (Month(GetDate())) 
and Year(DateField) = (Year(getdate())) 

これはおそらく動作しません。 1月1日、毎月の初日にもうまくいきます。しかし、その場で効果的です。

12

明らかな答えが見つからなかったようです。コラム(DatetimeColumn)は以下のクエリを使用することができ、タイムスタンプと日時であるテーブル(TTableと)からのすべてのデータを取得するには:

SELECT * FROM Ttable 
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday 

これは、簡単に、今日に変更することができ、先月、昨年、など

1

これはそれを行う必要があります:SQL Serverで

WHERE `date` = CURDATE() - INTERVAL 1 DAY 
1

は次のように実行します。

where cast(columnName as date) = cast(getdate() -1 as date) 

時刻書式の問題を避けるには、式の両辺を日付にキャストする必要があります。私はdatetime型に代わり、時間値のままと計算を使用する場合のSQL Server 2005には存在しdoesntの

declare @start datetime = cast(getdate() - 1 as date) 
declare @end datetime = cast(getdate() - 1 as date) 
set @end = dateadd(second, 86399, @end) 
関連する問題