この質問にはすでに答えがあります。
DELETE from Table WHERE Date > GETDATE();
GETDATE()は時間を含みます。得る代わりに
2011-01-26 14:58:21.637
どうすれば入手することができますか:
2011-01-26 00:00:00.000
SQL Serverへのわずかなバイアス
概要
DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
SQL Server 2008はdate
と入力します。だからちょうど使う
CAST(GETDATE() AS DATE)
編集:1日を追加するには、「ゼロ」の前の日と比較します
DATEADD(day, DATEDIFF(day, -1, GETDATE()), 0)
サイバーキウィから:
2つの機能を必要としない別の方法は、(+1は角かっこの内側または外側にあります)です。
DATEDIFF(DAY, 0, GETDATE() +1)
DateDiff
数値を返しますが、あらゆる目的のために、これをVARCHARに直接変換することを除いて、この式を使うつもりであればいつでも日付として機能します。その場合はGETDATE()でCONVERTアプローチを直接使います。
convert(varchar, GETDATE() +1, 102)
SQL Server 2008の場合、最もインデックスに優しい方法は次のとおりです。
DELETE from Table WHERE Date > CAST(GETDATE() as DATE);
以前のバージョンのSQL Serverでは、日付の計算はvarcharへの変換よりも速く動作します。地域の設定により、varcharに変換しても間違った結果が出ることがあります。
DELETE from Table WHERE Date > DATEDIFF(d, 0, GETDATE());
注:ラップする必要はありません。DATEDIFF
他のとDATEADD
internally
比較するとき、それは数値に変換されます、それでそれはちょうどintとしてそれを残すことがより良いかもしれません。 - RichardTheKiwi
データベースによって異なります。使用しているデータベースエンジンを指定していません。
例えばPostgreSQLではあなたはキャストします(日付としてのmyvalue)。
SELECT CONVERT(DATETIME, CONVERT(varchar(10), GETDATE(), 101))
あなたが使用することができます
DELETE from Table WHERE Date > CONVERT(VARCHAR, GETDATE(), 101);
ここではいくつか解決策があります。
http://www.bennadel.com/blog/122-Getting-Only-the-Date-Part-of-a-Date-Time-Stamp-in-SQL-Server.htm
>=
のではなく>
または、実際には2011-01-26 00:00:00.000のレコードを削除するのを忘れてしまいます... - Matt Gibsoncast(left(getdate(), 11) as datetime)
- Mohammad Anini